解题思路:
无限硬币,给定容量amount,求最小个数,鉴定为背包的变种。
初始化dp[amount]所有数无限大,表示不可组成,dp[0]=0。
状态转移时dp[j]=min(dp[j],dp[j-coins[i]])。
class Solution { public int coinChange(int[] coins, int amount) { int[] dp=new int[10005]; int n=coins.length; Arrays.fill(dp,Integer.MAX_VALUE-1); dp[0]=0; for(int i=0;i<n;i++){ for(int j=1;j<=amount;j++){ if(j-coins[i]>=0){ dp[j]=Math.min(dp[j],dp[j-coins[i]]+1); } } } if(dp[amount]==Integer.MAX_VALUE-1){ return -1; } return dp[amount]; } }
322. 零钱兑换
最新推荐文章于 2024-09-13 21:40:38 发布