题意思路:
把只包含质因子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个数
}
};
京公网安备 11010502036488号