思路
dp[i]=min(dp[i-某个值]2,dp[i-某个值]3,dp[i-某个值]*5)
这是动态规划寻找状态方程的思路
本题不能这么做,所以要从000出发,用三个指针标记 某个值
注意 1算是第一个丑数
代码
public class Solution {
public int GetUglyNumber_Solution(int index) {
if(index<=0){return 0;}
int p1=0,p2=0,p3=0;
int[] dp=new int[index+1];
dp[0]=1;
for(int i=1;i<=index;i++){
dp[i]=Math.min(dp[p1]*2,Math.min(dp[p2]*3, dp[p3]*5));
if(dp[i]==dp[p1]*2){p1++;}
if(dp[i]==dp[p2]*3){p2++;}
if(dp[i]==dp[p3]*5){p3++;}
}
return dp[index-1];
}
}
京公网安备 11010502036488号