思路:我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。
解题思路,没说的,暴力穷举。
class Solution {
public int nthUglyNumber(int n) {
int num=0;
int curr=1;
int temp=1;
while(true){
temp=curr;
while(temp%2==0){
temp=temp/2;
}
while(temp%3==0){
temp=temp/3;
}
while(temp%5==0){
temp=temp/5;
}
if(temp==1){
num++;
if(num==n){
break;
}
}
curr++;
}
return curr;
}
}
奈何时间超出限制。
方法二:动态规划
class Solution {
public int nthUglyNumber(int n) {
int a=0,b=0,c=0;
int dp[]=new int[n];
dp[0]=1;
for(int i=1;i<n;i++){
int n2 = dp[a] * 2, n3 = dp[b] * 3, n5 = dp[c] * 5;
dp[i] = Math.min(Math.min(n2, n3), n5);
if(dp[i]==n2)a++;
if(dp[i]==n3)b++;
if(dp[i]==n5)c++;
}
return dp[n-1];
}
}