leetcode 322. Coin Change 解题报告

来源:互联网 发布:真人拍照试衣软件 编辑:程序博客网 时间:2024/05/17 02:29

原题链接

原题链接

解题思路

题目很熟悉,和以前做过的一道很类似,于是想都没想就知道肯定是动态规划。
建立一个dp数组。dp[i]表示当凑齐i时最少要多少个数字组成。状态转移方程dp[i] = Math.min(dp[i-k] + 1,dp[i]);
解释一下吧,dp[i-k]只要不等于Integer.MAX_VALUE,证明凑齐i-k,有解。并且前面已经算出来了,这时候再加上k的1位数字就行。为了保证最少,所以要在诸多解中取最小值。

解题代码

public class Solution {    public int coinChange(int[] coins, int amount) {        if (amount == 0) return 0;        int[] dp = new int[amount + 1];        dp[0] = 0;        for (int i = 1;i <= amount ;i++ ) {            dp[i] = Integer.MAX_VALUE;            for(int k :coins) {                if(i>=k && dp[i-k] != Integer.MAX_VALUE) {                    dp[i] = Math.min(dp[i-k] + 1,dp[i]);                }            }        }        if(dp[amount]<Integer.MAX_VALUE && dp[amount] > 0) {            return dp[amount];        } else {            return -1;        }    }}
1 0
原创粉丝点击