声明:题目出自《剑指Offer》。算法原理请自行找书撸, 不废话。直接上Python版本代码。
题目:求从小到大的顺序的第1500个丑数。我们把只包含因子 2、3 和 5 的数称作丑数(Ugly Number)
1 #计算第1500个丑数
2 #1,2,3,4,5
3 import datetime
4
5 startTime = datetime.datetime.now()
6
7 uglyNumberList = [1]
8 indexList = [[0,2], [0,3], [0,5]]
9
10 while len(uglyNumberList) <= 1500:
11 var = min(uglyNumberList[indexList[0][0]]*2, uglyNumberList[indexList[1][0]]*3, uglyNumberList[indexList[2][0]]*5)
12 for i in range(0, 3):
13 if uglyNumberList[indexList[i][0]]*indexList[i][1] == var:
14 indexList[i][0] += 1
15 else:
16 uglyNumberList.append(var)
17 else:
18 deltaTime = datetime.datetime.now() - startTime
19 print("The 1500 ugly number is {}\nTime consuming is {} ms".format(uglyNumberList[-1], deltaTime.total_seconds()*1000))