其他分享
首页 > 其他分享> > 零钱兑换00

零钱兑换00

作者:互联网

题目链接

零钱兑换

题目描述

注意

解答思路

代码

public class Solution {
    public int coinChange(int[] coins, int amount) {
        // dp数组记录从0到amount金额所需的最少硬币个数,初始值设置为max
        int max = amount + 1;
        int[] dp = new int[max];
        Arrays.fill(dp, max);

        // 当总金额为0时,最少的硬币个数就是0
        dp[0] = 0;

        // 从金额1推算到金额amount所需的最少硬币个数
        for (int i = 1; i <= amount; i++) {
            // 遍历数组中的硬币面额
            for (int j = 0; j < coins.length; j++) {
                if (coins[j] <= i) {
                    // 金额i所需的最少硬币个数,只有在(i - coins[j] >= 0)时才进入判断
                    // 如果没有硬币金额可以组合成i - coins[j],则dp[i - coins[j]]的值大于amount,对后续结果没影响
                    dp[i] = Math.min(dp[i], dp[i - coins[j]] + 1);
                }
            }
        }

        return dp[amount] > amount ? -1 : dp[amount];
    }
}

关键点

标签:00,硬币,int,coins,零钱,amount,兑换,总金额,dp
来源: https://blog.csdn.net/weixin_51628158/article/details/120383518