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

方法一 :数学 枚举

丑数是只包含质因子2、3和5的数,可以从小到大枚举满足条件的数

先将满足条件的最小的数加入数组存储

直到第N个数。

图解:
图片说明

复杂度分析

时间复杂度:O(N),N为第N个数,遍历枚举;

空间复杂度:O(N),存储与读取数据。

代码:

class Solution {
public:
    int GetUglyNumber_Solution(int index) {
        if(index==0)return 0;
        int x2=0,x3=0,x5=0;//丑数的因子只有2,3,5
        vector<int>res;
        res.push_back(1);
        for(int i=1;i<index;i++){
            res.push_back(min(res[x2]*2,min(res[x3]*3, res[x5]*5)));//将满足条件的最小丑数加入
            if(res[i]==res[x2]*2)x2++;//若满足条件则增加系数
            if(res[i]==res[x3]*3)x3++;
            if(res[i]==res[x5]*5)x5++;
        }
        return res[index-1];//返回第k个数
    }
};