问题描述
—–丑数,如果一个数的因子只有2,3,5,那我们可以说这个数是丑数,现在求第n个丑数,假设1是丑数。
输入输出
20
36
这个意思就是第20个丑数是36
上代码
def getUglyNumber(index):
if index == 0:
return 0
elif index == 1:
return 1
lst = [1]
k2 = 0
k3 = 0
k5 = 0
while len(lst) < index:
m2 = lst[k2] * 2
m3 = lst[k3] * 3
m5 = lst[k5] * 5
mi = min(m2, min(m3, m5))
if mi == m2:
k2 = k2 + 1
elif mi == m3:
k3 = k3 + 1
elif mi == m5:
k5 = k5 + 1
try:
lst.index(mi) >= 0
except:
lst.append(mi)
else:
print 'chongfule'
return lst[len(lst) - 1]
import time
start = time.time()
print getUglyNumber(20)
end = time.time()
print end - start
复杂度
时间复杂度O(n)
空间复杂度O(n)
算法运行时间0.00019907951355
复杂度如有误欢迎留言纠正。
—–代码因该不难理解,我们就求2,3,5的倍数,然后按最小到大顺序排列,就可以了。