大神的写法, beats 100%
def nthUglyNumber(n):
if n <= 0:
return 0
if n == 1:
return 1
k = [1]
t2 = 0
t3 = 0
t5 = 0
for i in range(1, n+1):
tmp = min(k[t2]*2, min(k[t3]*3, k[t5]*5))
k.append(tmp)
if k[i] == k[t2]*2:
t2 += 1
if k[i] == k[t3]*3:
t3 += 1
if k[i] == k[t5]*5:
t5 += 1
return k[n-1]
if __name__ == '__main__':
n = 599
d = nthUglyNumber(n)
print d
一般的思路会超时:
def nthUglyNumber_TLE(n):
num = 1
while n > 0:
tmp = num
while tmp % 2 == 0:
tmp /= 2
while tmp % 3 == 0:
tmp /= 3
while tmp % 5 == 0:
tmp /= 5
if tmp == 1:
n -= 1
if n == 0:
return num
num += 1