其他算法-033-醜數

題目描述

把只包含質因子235的數稱作醜數(Ugly Number)。例如68都是醜數,但14不是,因爲它包含質因子7。 習慣上我們把1當做是第一個醜數。求按從小到大的順序的第N個醜數。

分析

  • 方法一:暴力搜索,時間複雜度不滿足要求。
  • 方法二:動態規劃方法,當前第n個醜數等於,前n-1個醜數中乘2乘3乘5中最小的數,且不再前n-1個醜數之中。

代碼

class Solution:
    def GetUglyNumber_Solution(self, index):
        # write code here
        '''
        不必維護三個隊列
        維護三個指針
        分別作用爲 乘2,3或者5,最開始大於原數組最大的指針。
        '''
        if index<=0:
            return 0
        
        uglyL = [1]
        p2 = 0
        p3 = 0
        p5 = 0
        
        for i in range(1,index):
            uglyLmax = min(uglyL[p2]*2, uglyL[p3]*3, uglyL[p5]*5)
            uglyL.append(uglyLmax)
 
            while uglyL[p2]*2<=uglyLmax:
                p2+=1
                
            while uglyL[p3]*3<=uglyLmax:
                p3+=1
            
            while uglyL[p5]*5<=uglyLmax:
                p5+=1
        return uglyL[-1]      
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章