//动态规划 class Solution { public int nthUglyNumber(int n) { //定义一个数组dp,来按序存放丑数 int[] dp = new int[n]; //第一个丑数是1 dp[0] = 1; //分别定义由质因子 2,3,5 乘以较小丑数得到的下标索引 int a2=0,a3=0,a5=0; //遍历,找丑数 for(int i=1;i<n;i++){ //最小的丑数排在最前 dp[i] = Math.min(Math.min(dp[a2]*2,dp[a3]*3),dp[a5]*5); //更新索引 if(dp[i] == dp[a2]*2) a2++; if(dp[i] == dp[a3]*3) a3++; if(dp[i] == dp[a5]*5) a5++; } return dp[n-1]; } }