丑数 = 已有的丑数 * (2,3,5) 得到三个新的丑数,但是新的丑数位置不一定正确,切可能会有重复
所以我们每次只新增一个最小值,然后用三个指针记录当前2,3,5质因子形成的最大丑数位置,这样的话就会形成递增的丑数队列,而且遍历的次数也很容易就知道,即n-1,因为1是第一个丑数,n-1次遍历后,我们就可以得到一个含有n个丑数的有序数组,返回最后一个即可
# -*- coding:utf-8 -*-
class Solution:
def GetUglyNumber_Solution(self, index):
# write code here
if index<=0:
return 0
uglylist=[1]
p2=p3=p5=0
for i in range(index-1):
newugly = min(uglylist[p2]*2,uglylist[p5]*5,uglylist[p3]*3)
uglylist.append(newugly)
if not newugly % 2:
p2+=1
if not newugly %3:
p3+=1
if not newugly %5:
p5+=1
return uglylist[-1]
京公网安备 11010502036488号