完全背包问题,需要注意的是数组的初始值。
class Solution {public int coinChange(int[] coins, int amount) {int[] dp = new int[amount+1];for(int i = 0;i <= amount;i++){dp[i] = Integer.MAX_VALUE;}dp[0] = 0;for(int i = 0;i < coins.length;i++){for(int j = coins[i];j <= amount;j++){if(dp[j - coins[i]] != Integer.MAX_VALUE){dp[j] = Math.min(dp[j - coins[i]]+1,dp[j]);} }}return dp[amount] == Integer.MAX_VALUE ? -1 : dp[amount];}
}
和上一题思路相同
class Solution {public int numSquares(int n) {int[] dp = new int[n+1];for(int i = 0;i < dp.length;i++){dp[i] = Integer.MAX_VALUE;}dp[0] = 0;for(int i = 1;i * i <= n;i++){for(int j = i*i;j <= n;j++){if(dp[j - i * i] != Integer.MAX_VALUE){dp[j] = Math.min(dp[j],dp[j - i * i] + 1);} }}return dp[n];}
}