题目描述
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
解题思路:
如果p是丑数,那么p=2^x * 3^y * 5^z,那么只要赋予x,y,z不同的值就能得到不同的丑数
1、从丑数数组里的数乘以2,3,5选出最小数
2、用三个指针来记录当前乘以2、乘以3、乘以5的最小值,然后当其被选为新的最小值后,把相应的指针+1
代码实现:
#include<algorithm>
class Solution {
/*
如果p是丑数,那么p=2^x * 3^y * 5^z,那么只要赋予x,y,z不同的值就能得到不同的丑数
1、从丑数数组里的数乘以2,3,5选出最小数
2、用三个指针来记录当前乘以2、乘以3、乘以5的最小值,然后当其被选为新的最小值后,把相应的指针+1
*/
public:
int GetUglyNumber_Solution(int index) {
if(index < 7){
return index;
}
vector<int> v;
int u2 = 0,u3 = 0,u5 = 0;
int ans = 1;//存取当前最小的丑数
v.push_back(ans);
while(v.size() < index){
ans = min(v[u2]*2,min(v[u3]*3,v[u5]*5));
if(ans == v[u2]*2){
u2++;
}
if(ans == v[u3]*3){
u3++;
}
if(ans == v[u5]*5){
u5++;
}
v.push_back(ans);
}
return ans;
}
};