剑指offer67题-No33.第N个丑数

数学模拟题,

只包含质因子2、3和5的数称作丑数,所以丑数的形式实质上是:2x3y5z

对于x、y、z的理解,把他们视作三个独立维护的指针,可以想象有三个队列:

队列2: 1×2 → 2×2 → 3×2 → 4×2 → ...
队列3: 1×3 → 2×3 → 3×3 → 4×3 → ...
队列5: 1×5 → 2×5 → 3×5 → 4×5 → ...

每次取三个队首的最小值,并移动对应指针。res就是要比这对求出这三个队列中的最小值。

    int GetUglyNumber_Solution(int index) {
        if(index == 0) return 0;
        // write code here
        // res 用以维护得到的丑数序列
        vector<long long> res(index);
        res[0] = 1;
        // 丑数实质是2^x * 3^y * 5^z
        // x y z 用以标记2,3,5乘的次数
        int x = 0,y = 0, z = 0;
        for(int i = 1; i < index; i++){
            // 因为每个res都是一个丑数,求出下一个res肯定是由先前的丑数*2/*3/*5出来的,所以维护三个不同的指针,指向先前不同的丑数,当前的丑数就是这三个中最小的。
            res[i] = min(res[x]*2, min(res[y]*3, res[z]*5));
            if(res[i] == res[x]*2) x++;
            if(res[i] == res[y]*3) y++;
            if(res[i] == res[z]*5) z++;
        }
        return res[index - 1];
    }
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇