用动态规划法求解
1–> 1
2–>{ 12 √
{ 13
{ 1*5
3–>{22
{13 √
{1*5
4–>{ 22 √
{ 23
{1*5
5—>{32
{23
{1*5 √
6—>{32√
{23√
{25
7–>{42 √
{33
{25
class Solution {
public int nthUglyNumber(int n) {
if(n==1) return 1;
int [] dp=new int[n+1];
dp[1]=1;
int p1=1,p2=1,p3=1;
for(int i=2;i<=n;i++){
int n1=dp[p1]*2;
int n2=dp[p2]*3;
int n3=dp[p3]*5;
dp[i]=Math.min(Math.min(n1,n2),n3);
if(dp[i]==n1) p1++;
if(dp[i]==n2) p2++;
if(dp[i]==n3) p3++;
}
return dp[n];
}
}