public class Solution { public int GetUglyNumber_Solution(int index) { if(index <= 0) return 0; int dp2 = 1,dp3 = 1, dp5 = 1; // 定义数组 dp,其中 dp[i] 表示第 i 个丑数,第 n 个丑数即为 dp[n]。 int[] dp = new int[index+1]; dp[1] = 1; for (int i = 2; i <= index; i++) { // dp[dpi] 一定是丑数,那么numi也一定是丑数;并且numi > dp[i-1] int num2 = dp[dp2]*2; int num3 = dp[dp3]*3; int num5 = dp[dp5]*5; dp[i] = Math.min(num2,Math.min(num3,num5)); // 判断相等就说明使用到了,故而需要向后移1位 // 三个if都要判断,这样可以去重 // 比如 dp2:3,dp3:2,dp5:2 => dp2:4,dp3:3,dp5:2 , dp[6]:6 = num2=num3 if (dp[i] == num2) { dp2++; } if (dp[i] == num3) { dp3++; } if (dp[i] == num5) { dp5++; } // System.out.println("dp2:" + dp2 + ",dp3:" + dp3 + ",dp5:" + dp5); // System.out.println("dp["+i+"]:" + dp[i]); } return dp[index]; } }