題目描述
把只包含質因子2
、3
和5
的數稱作醜數(Ugly Number)。例如6
、8
都是醜數,但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]