立即学习:https://edu.csdn.net/course/play/26755/340197?utm_source=blogtoedu
老师代码写错了,minNum应该是4个数中的最小值(再加上minNum自身),在每次比较前复制为正无穷float('inf')。另外下面3个while的判断应该是分别乘2、3、4。修改见下
def getUglyNumber(index):
if index < 1:
return 0
res = [1]
t2 = t3 = t5 = 0
nextdex = 1
while nextdex < index:
minNum = float('inf')
minNum = min(minNum, res[t2] * 2, res[t3] * 3, res[t5] * 5)
res.append(minNum)
while res[t2] * 2 <= minNum:
t2 += 1
while res[t3] * 3 <= minNum:
t3 += 1
while res[t5] * 5 <= minNum:
t5 += 1
nextdex += 1
return res
另外还可以这样写
def nextUglyNum(alist):
min_num = float('inf')
for one in alist:
if 2 * one not in alist:
min_num = min(min_num, 2 * one)
if 3 * one not in alist:
min_num = min(min_num, 3 * one)
if 5 * one not in alist:
min_num = min(min_num, 5 * one)
alist.append(min_num)
index = 100
alist = [1, 2, 3, 4, 5]
while len(alist) < index:
nextUglyNum(alist)
print(alist)
print(alist[-1])