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];
    }
}