python3 纯数学方法,好懂但是耗时长,好在空间复杂度低

寻找丑数

http://www.nowcoder.com/questionTerminal/cff52ae345a248ea94c8c0cc2d278474

时间复杂度应该是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])
全部评论

相关推荐

头像
09-19 19:21
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
今天 11:06
辽宁大学 市场
深莞高速因为台风都封掉了,华为协商后,特地开通华为通道,凭工卡可以正常通勤......
崔喃喃:“台风您好,19级专家已驳回了您18级台风的OA登陆申请”
投递华为技术有限公司等公司10个岗位
点赞 评论 收藏
分享
09-17 19:25
已编辑
太原理工大学 游戏测试
叁六玖:公司名发我,我要这个HR带我打瓦
我的秋招日记
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务