丑数 = 已有的丑数 * (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]