给你一个整数 n ,请你找出并返回第 n 个 丑数 。
丑数 就是只包含质因数 2、3 和/或 5 的正整数。
示例 1:
输入:n = 10
输出:12
解释:[1, 2, 3, 4, 5, 6, 8, 9, 10, 12] 是由前 10 个丑数组成的序列。
示例 2:
输入:n = 1
输出:1
解释:1 通常被视为丑数。
提示:
1 <= n <= 1690
思路
- 暴力失败:超时
- 预处理所有丑数
代码:
const long max=0X7FFFFFFF;
int cmp(const void*a,const void*b) // 排序规则(按降序排)
{
return *(int*)b<*(int*)a;
}
int nthUglyNumber(int n){
long i,j,k,a[1700],flag,f;
f=0;flag=0;
for(i=1;i<max;i*=2)
{
for(j=1;j<max;j*=3)
{
for(k=1;i*j*k<max;k*=5)
{
a[flag++]=i*j*k;
}
}
}
qsort(a,flag,sizeof(a[0]),cmp);
printf("%d\n",a[n-1]);
for(i=0;i<1619;i++)
printf("%d-%d\t",i,a[i]);
return a[n-1];
}