leetcode--1201. 丑数 III

这篇博客分享了作者在解决LeetCode问题1201——丑数III时遇到的知识点,包括n以内的丑数个数公式:n / a + n / b + n / c - n / lcm(a, b) - n / lcm(a, c) - n / lcm(b, c) + n / lcm(a, b, c),并提示可以使用二分查找法进行求解。博主还提醒大家,C++17提供了std::gcd和std::lcm函数,是解题的重要工具。" 120323552,11434814,Java Applet程序实践:绘制文字与问题解析,"['Java', '小程序']
摘要由CSDN通过智能技术生成

题目:1201. 丑数 III

链接:https://leetcode-cn.com/problems/ugly-number-iii/

这个题目我没做出来,有个知识点不知道,看完评论之后才懂:

n以内的丑数个数为 n / a + n / b + n / c - n / lcm(a, b) - n / lcm(a, c) - n / lcm(b, c) + n / lcm(a, b, c),在这个基础上就比较容易想到二分查找了

C++:

typedef long long LL;

class Solution {
public:
    LL gcd(LL a, LL b) {
        return b == 0 ? a : gcd(b, a % b);
    }

    int nthUglyNumber(int n, int a, int b, int c) {
        LL gcd_ab = gcd(a, b), gcd_bc = gcd(b, c), gcd_ac = gcd(a, c);
        LL lcm_ab = static_cast<LL>(1.0 * a * b / gcd_ab), lcm_ac = static_cast<LL>(1.0 * a * c / gcd_ac), 
        lcm_bc = static_cast<LL>(1.0 * b * c / gcd_bc);
        LL lcm_abc &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值