【重点】【DP】322.零钱兑换

题目

法1:动态规划

// 时间复杂度:O(kN)
class Solution {
    public int coinChange(int[] coins, int amount) {
        // dp[i]表示从coins[0, i]范围内组合成i的最小硬币数量
        int[] dp = new int[amount + 1]; 
        Arrays.fill(dp, amount + 1);
        dp[0] = 0;
        for (int i = 1; i <= amount; ++i) {
            for (int coin : coins) {
                if (i >= coin) {
                    // min{不取当前coin, 取当前coin}
                    dp[i] = Math.min(dp[i], dp[i - coin] + 1);         
                }
            }
        }

        return dp[amount] == amount + 1 ? -1 : dp[amount];
    }
}

你可能感兴趣的:(力扣Top100,dp,凑零钱)