劍指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]