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