思路:我和想的方法和主流方法不一样,暴力打表。附上代码,难点在于确定指数范围。
题目描述
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。 class Solution {
public:
int GetUglyNumber_Solution(int index) {
int uglynumber = 1;//丑数的本质是 2^k*3^j*5^i,
int l = 0;
long long a[100000] = {0};//所以暴力打表把Int范围内所有丑数存到a中
//为了确定i,j,k的范围,不能超过2^31-1,统一化log2为低的对数;
double log5 = log(5)/log(2);
double log3 = log(3)/log(2);
for(int i=0;i<31;i++){
for(int j=0;j<31;j++)
for(int k=0;k<31;k++){
if(i*log5+j*log3+k<31){
a[l++] = pow(2,k)*pow(3,j)*pow(5,i);
}
}
}
sort(a,a+l);
uglynumber = a[index-1];
return uglynumber;
}
}; 
京公网安备 11010502036488号