劍指Offer(Python多種思路實現):醜數

劍指Offer(Python多種思路實現):醜數

面試49題:

題:醜數

題目:把只包含因子2、3和5的數稱作醜數(Ugly Number)。例如6、8都是醜數,但14不是,因爲它包含因子7。 習慣上我們把1當做是第一個醜數。求按從小到大的順序的第N個醜數。

解題思路一:時間效率不高,對每一個數都需要判斷它是不是醜數

class Solution:
    def GetUglyNumber_Solution(self, index):
        # write code here
        if index<=0:
            return 0
        
        number=0
        uglyFound=0
        while (uglyFound<index):
            number+=1
            if self.IsUgly(number):
                uglyFound+=1
        return number
    
    def IsUgly(self,number):
        while number%2==0:
            number=number//2
        while number%3==0:
            number=number//3
        while number%5==0:
            number=number//5
        return True if number==1 else False

解題思路二:時間效率不高,對每一個數都需要判斷它是不是醜數
 

class Solution:
    def GetUglyNumber_Solution(self,index):
        if index<=0:
            return 0
        res=[1]
        nextIndex=1
        t2=t3=t5=0

        while nextIndex<index:
            min_val = min(res[t2]*2,res[t3]*3,res[t5]*5)
            res.append(min_val)
            while res[t2]*2 <= min_val:
                t2 += 1
            while res[t3]*3 <= min_val:
                t3 += 1
            while res[t5]*5 <= min_val:
                t5 += 1
            nextIndex+=1

        return res[index-1]

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章