50.丑数

我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。

例如 6、8 都是丑数,但 14 不是,因为它包含质因子 7。

求第 n 个丑数的值。

数据范围:

1≤n≤1000

样例:

输入:5
输出:5

注意: 习惯上我们把 1 当做第一个丑数。

代码:

class Solution {
    public int getUglyNumber(int n) {
        //创建数组用于存储按顺序生成的丑数
        int[] num = new int[n];
        //第一个丑数是1
        num[0] = 1;
        //初始化三个指针,分别对应要乘以2、3、5的位置
        int idx2 = 0;
        int idx3 = 0;
        int idx5 = 0;
        for(int i = 1;i<n;i++){
            //计算三个候选丑数
            int next2 = num[idx2]*2;
            int next3 = num[idx3]*3;
            int next5 = num[idx5]*5;
            //选择三个候选数中的最小值作为下一个丑数
            num[i] = Math.min(next2,Math.min(next3,next5));
            //更新指针:哪个(或哪些)候选数被选中了,对应的指针就向前移动
            if(num[i] == next2)idx2++;
            if(num[i] == next3)idx3++;
            if(num[i] == next5)idx5++;
        }
        //返回第n个丑数
        return num[n-1];
    }
}
posted @ 2025-05-29 10:29  回忆、少年  阅读(20)  评论(0)    收藏  举报