学习笔记 – 83 – 找到第n个丑数

只包含2、3、5中的1个或多个因子的数称为丑数,要求按从小到大的顺序找到第n个丑数

'''
2, 3, 5

6: 是丑数
14: 不是丑数,包含7

下一个丑数必定是数组的某一个丑数A * 2B * 3C * 5 中最小的值

M2, 之前的丑数*2都小于当前最大的丑数
    之后的丑数*2都大于当前最大的丑数
    
M3M5
'''

def getUglyNumber(index):
    if index < 1:
        return 0
    res = [1]
    t2 = t3 = t5 = 0
    nextdex = 1
    while nextdex < index:
        minNum = min(res[t2] * 2, res[t3] * 3, res[t5] * 5)
        res.append(minNum)
        
        while res[t2] * 2 <= minNum:
            t2 += 1 
        while res[t3] * 2 <= minNum:
            t3 += 1  
        while res[t5] * 2 <= minNum:
            t5 += 1
        nextdex += 1
    return res[nextdex - 1]

print(getUglyNumber(10))

512

正文完