编程语言
首页 > 编程语言> > 剑指Offer JZ33 丑数(JavaScript)

剑指Offer JZ33 丑数(JavaScript)

作者:互联网

时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M 热度指数:526571
本题知识点: 数学 二分

题目描述
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
示例1
输入
7
返回值
8

思路:拼凑法,每次我们只用比较3个数:用于乘2的最小的数、用于乘3的最小的数,用于乘5的最小的数。
注意:需要用3个if,防止重复,如23和32

function GetUglyNumber_Solution(index) {
    // write code here
    if (index <= 6) {
        return index;
    }
    let res = [1];
    let p2 = 0,
        p3 = 0,
        p5 = 0;
    for (let i = 1; i < index; i++) {
        let num = Math.min(res[p2] * 2, res[p3] * 3, res[p5] * 5);
        if (num == res[p2] * 2) p2++;
        if (num == res[p3] * 3) p3++;
        if (num == res[p5] * 5) p5++;
        res.push(num);
    }
    return res[index - 1];
}

答案参考自:叮叮当叮叮当

标签:丑数,index,res,JZ33,JavaScript,p3,num,let
来源: https://blog.csdn.net/weixin_44523860/article/details/115280919