题解 | #丑数#

丑数

https://www.nowcoder.com/practice/6aa9e04fc3794f68acf8778237ba065b

双O(n)解法,见注释
class Solution:
    def GetUglyNumber_Solution(self, index: int) -> int:
        if not index:
            return 0

        # 结果列表
        res_list = [1]

        # 思路:不断添加最小的进来:三个候选者(2,3,5)分别乘上列表的(i, j, k)位置
        # 初始位置都是0,谁最小,谁添加,并更新对应的i, j, k
        i, j, k = 0, 0, 0

        while index - 1:
            a, b, c = 2 * res_list[i], 3 * res_list[j], 5 * res_list[k]
            # 添加最小的
            res_list.append(min(a, b, c))
            # 谁最小,谁更新
            if a == min(a, b, c):
                i += 1
            if b == min(a, b, c):
                j += 1
            if c == min(a, b, c):
                k += 1
            index -= 1
            
        # 返回表尾即可
        return res_list[-1]


全部评论

相关推荐

点赞 评论 收藏
分享
06-20 21:22
已编辑
门头沟学院 Java
纯真的河老师在喝茶:答应了就跑啊,实习随便跑啊,别被pua了,md就是找个廉价劳动力,还平稳过度正式工,到时候跟你说没转正
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

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