目录
丑数
描述
我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。
示例
输入
n = 10
输出
12
解释
1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。
说明
- 1 是丑数
- n 不超过1690
方法:动态规划
由丑数的定义我们可知除了第一个丑数,其他丑数都是一定是某个丑数的2、3或者5的倍数。
所以我们就可以用动态规划的方法,对于第n+1个丑数,只可能有三种情况:
class Solution {
public int nthUglyNumber(int n) {
int cur2=0,cur3=0,cur5=0;
int dp[]=new int[n];//存放丑数
dp[0]=1;
for (int i = 1; i < n; i++) {
int n2=dp[cur2]*2,n3=dp[cur3]*3,n5=dp[cur5]*5;
dp[i]=Math.min(Math.min(n2,n3),n5);
if (dp[i]==n2) cur2++;
if (dp[i]==n3) cur3++;
if (dp[i]==n5) cur5++;
}
return dp[n-1];
}
}