时间复杂度应该是O(n),但是多出了很多不必要的计算,不过空间复杂度只有O(1)。
n = int(input().strip())
count = 1
num = 1
num_copy = 1
while count < n:
num_copy += 1
num = num_copy
while num % 2 == 0:
num //= 2
while num % 3 == 0:
num //= 3
while num % 5 == 0:
num //= 5
if num == 1:
count += 1
print(num_copy)再上一个时间复杂度低的代码,它通过列表来存储出现的丑数,再用丑数来计算丑数,从而省掉了很多非丑数的计算。
n = int(input())
dp, a, b, c = [1] * n, 0, 0, 0
for i in range(1, n):
n2, n3, n5 = dp[a] * 2, dp[b] * 3, dp[c] * 5
dp[i] = min(n2, n3, n5)
if dp[i] == n2:
a += 1
if dp[i] == n3:
b += 1
if dp[i] == n5:
c += 1
print(dp[-1])
京公网安备 11010502036488号