我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。
例如 6、8 都是丑数,但 14 不是,因为它包含质因子 7。
求第 n 个丑数的值。
样例
输入:5
输出:5
注意:习惯上我们把 1 当做第一个丑数。
解析:
本题采用归并排序的思想,将元素1以及分别将由2,3,5的倍数所组成的数组中的元素合并(去重后)到一个新的数组中,则这个数组就是由丑数所组成的集合
class Solution {
public:
int getUglyNumber(int n){
vector<int> q(1,1);
int i=0,j=0,k=0;
while(--n){//因为1是第一个丑数,所以我们只需要计算n-1次
int t=min(q[i]*2,min(q[j]*3,q[k]*5));
q.push_back(t);
if(q[i]*2==t) i++;
if(q[j]*3==t) j++;
if(q[k]*5==t) k++;
}
return q.back();
}
};
如有问题,欢迎在评论区提问