常规思路:依次寻找丑数
#include<iostream>
#include<vector>
#include<map>
#include<algorithm>
using namespace std;
bool Judge_ugly(int n){
while (n % 2 == 0)
n = n / 2;
while (n % 3 == 0)
n /= 3;
while (n % 5 == 0)
n /= 5;
if (n == 1)
return true;
else
return false;
}
int findkthUgly(int n)
{
int i = 1;
int num = 1;
//num = num + 1;
while (i < n){
num++;
while (!findkthUgly(num))
num++;
i++;
}
return num;
}
方法2:用空间换时间
#include<algorithm>
#include<iostream>
using namespace std;
int min(int a,int b,int c)
{
int min= a<b?a:b;
return min<c?min:c;
}
int GetUglyNumber(int index)
{
if (index <= 0)
return 0;
int* data = new int[index];
data[0] = 1;
int cur_index = 1;
int *num_2 = data;
int *num_3 = data;
int *num_5 = data;
while (cur_index < index){
int next_num = min(*num_2 * 2, *num_3 * 3, *num_5 * 5);
data[cur_index] = next_num;
while (*num_2 * 2 <= next_num)
++num_2;
while (*num_3 * 3 <= next_num)
++num_3;
while (*num_5 * 5 <= next_num)
++num_5;
cur_index++;
}
int ugly = data[cur_index - 1];
delete[]data;
return ugly;
}
int main()
{
int n;
cin>>n;
int res= GetUglyNumber(n);
cout<<res<<endl;
return 0;
}