• 丑数


    把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。

    习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。

    可能刚开始没看懂题意,这里解释一下

    1是丑数,然后是质因数为2,3,5的数

    就是说4是两个丑数2相乘得到的一个丑数

    6是2*3的到的丑数

    8是2*4得到的丑数

    就是说丑数是由前面的一个丑数乘以2或3或5得到的

    题解:如何得到前一个丑数那,

    存放丑数数组res,res数组里的第一个元素为1。因为我们要让丑数数列有序,所以要每次使这三个因子组成的最小的数进入数组。

    t2表示乘以2得到的丑数,t3表示乘以3得到的丑数,t5是乘以5得到的丑数, 

    把最小的进入丑数数组res

    res: 1

    t2: 2
    t3: 3
    t5: 5
    比较(2,3,5)->min_n = 2,   2进入 res

     

     res:1 2

    t 2:   4
    t 3:   3 6
    t 5:   5 10

    然后比较当前的值(4,3,5),3再进入res

    res 1 2 3

    t 2:   4
    t 3:   6 9
    t 5:   5 10

    (4, 5, 6)  得到4进入res

    class Solution {
    public:
        int GetUglyNumber_Solution(int index) {
            // 1--6都是丑数
            if(index < 7)
                return index;
    
            vector<int>res(index);
            res[0] = 1;
            // t2 就是乘以2的丑数,t3就是乘以3的丑数,t5就是乘以5的丑数
            int t2 = 0, t3 = 0, t5 = 0;
            for(int i = 1; i < index; i++)
            {
                // 三个丑数中选取最小的(2,3,5) 作为下一个丑数
                res[i] = min(res[t2]*2, min(res[t3]*3, res[t5]*5));
    
                if(res[i] == res[t2] * 2)  t2++;
                if(res[i] == res[t3] * 3)  t3++;
                if(res[i] == res[t5] * 5)  t5++;
            }
            return res[index-1];
        }
    };

    https://blog.csdn.net/qq_38790716/article/details/89052721

  • 相关阅读:
    python3 练习题 day04
    python3 装饰器
    python3 生成器和生成器表达式
    python3 列表/字典/集合推导式
    python3 迭代器
    python3 day04 大纲
    ES6 的数值扩展
    ES6中的解构赋值
    ES6中 let与const 的区别
    react的基本配置安装及使用babel
  • 原文地址:https://www.cnblogs.com/xiaokang01/p/12517916.html
Copyright © 2020-2023  润新知