题目描述
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
链接
代码
//class Solution {
//public:
// int GetUglyNumber_Solution(int index) {
// // 先找出1000000以内的全部质数
// int zhishuSize = 10000;
// int uglySize = 10000;
// bool zhishu[zhishuSize];
// for(int i = 0; i < zhishuSize; i++){
// zhishu[i] = 1;
// }
// for(int i = 2; i < zhishuSize; i++){
// if(zhishu[i]){
// for(int j = i + 1; j < zhishuSize; j++){
// if(j%i == 0){
// zhishu[j] = 0;
// }
// }
// }
// }
for(int i = 2; i < zhishuSize; i++){
if(zhishu[i]){
cout << i << " ";
}
}
// //把丑数表中的数,如果能被大于7的质数整除z,则不是丑数
// bool ugly[uglySize];
// for(int i = 0; i < uglySize; i++){
// ugly[i] = 1;
// }
// for(int i = 7; i < zhishuSize; i++){
// if(zhishu[i] == 1){
// for(int j = 7; j < uglySize; j++){
// if(ugly[j] == 1 && j % i == 0){
// ugly[j] = 0;
// }
// }
// }
// }
for(int i = 1; i < uglySize; i++){
if(ugly[i]){
cout << i << " ";
}
}
// int ans = 0;
// for(int i = 1; i < uglySize; i++){
// if(ugly[i] == 1){
// ans = i;
// index--;
// }
// if(index == 0){
// ans = i;
// break;
// }
// }
// return ans;
// }
//};
class Solution {
public:
int GetUglyNumber_Solution(int index) {
if(index == 0){
return 0;
}
int a[index];
a[0] = 1;
int p2 = 0;
int p3 = 0;
int p5 = 0;
for(int i = 1; i < index; i++){
int min = getMin(a[p2]*2, a[p3]*3, a[p5]*5);
a[i] = min;
if(a[p2]*2 == min){
p2++;
}
if(a[p3]*3 == min){
p3++;
}
if(a[p5]*5 == min){
p5++;
}
}
return a[index-1];
}
int getMin(int a, int b, int c){
if(a > b){
swap(a, b);
}
if(a > c){
swap(a, c);
}
return a;
}
};