思路:p2、p3、p5分别记录基于2、3、5生成丑数的位置

注意:注意指针移动

class Solution:
    def GetUglyNumber_Solution(self , index: int) -> int:
        # write code here
        
        if index == 0:
            return 0
        
        dp = [0] * (index)
        dp[0] = 1
        p2, p3, p5 = 0, 0, 0 # 乘以2、3、5当前可生成最小丑数的位置
        
        for i in range(1, index):
            dp[i] = min(dp[p2]*2, min(dp[p3]*3, dp[p5]*5))
            
            if dp[p2] * 2 == dp[i]: # 当前由基于2生成最小丑数,p2移动
                p2 += 1
            
            if dp[p3] * 3 == dp[i]:
                p3 += 1
                
            if dp[p5] * 5 == dp[i]:
                p5 += 1
        return dp[index-1]