leetcode264 返回第n个丑数

该算法实现了一个寻找第n个丑数的解决方案,通过维护一个丑数数组res,使用三个指针a,b,c分别跟踪当前可以乘以2,3,5的下一个丑数,每次将最小的乘积添加到数组中,直到找到第n个丑数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

丑数就是只包含质因数 23 和/或 5 的正整数。1也是丑数。

丑数一定是比它小的丑数乘2、3、5得到的。

res[n] =\begin{cases} {res[a] * 2} \\ {res[b] * 3} \\ {res[c] * 5} \end{cases} 0 \leq a,b,c

class Solution(object):
    def nthUglyNumber(self, n):
        res = [1] * n
        a, b, c = 0, 0, 0
        for i in range(1,n):
            n2, n3, n5 = res[a] * 2, res[b] * 3, res[c] * 5
            res[i] = min(n2, n3, n5)
            if res[i] == n2: a += 1
            if res[i] == n3: b += 1
            if res[i] == n5: c += 1
        return res[-1]

可以理解成从1开始维护一个丑数数组,a,b,c表示当前的丑数乘以2,3,5还没放入丑数数组(a指向的丑数只和2乘,b和3,c和5)

res 1,2,3,4,5,6,8,9,10 ...

计算过程

2*1,2*2,2*3,2*4,2*5,2*6,2*8,2*9 ...

3*1,3*2,3*3,3*4,3*5,3*6,3*8,3*9 ...

5*1,5*2,5*3,5*4,5*5,5*6,5*8,5*9 ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值