把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
class Solution {
const int INF=999999999;
public:
int GetUglyNumber_Solution(int index) {
if(index <= 0) return 0;
int *f=new int[index+5];
int p[3]={1,1,1},m[3]={2,3,5};
f[1]=1;
int i,j,mark;
for(i=2;i<=index;i++){
mark=INF;
for(j=0;j<3;j++){
while(f[p[j]]*m[j]<=f[i-1])p[j]++;
mark=min(mark,f[p[j]]*m[j]);
}
f[i]=mark;
}
int ans=f[index];
delete[]f;
return ans;
}
};