タイトル説明
唯一の素因数が含まれている2
、3
と5
番号が醜い数(アグリーナンバー)と呼ばれています。例えば6
、8
14醜いではなく、数の両方、それは7素因数が含まれているため。伝統的に、我々は最初の醜い数として1を持っています。N醜い多数配列を通して上昇を求めます。
分析
- 方法:
暴力搜索
時間複雑さの要件を満たしていません。 - 方法II:
动态规划
メソッドの現在の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]