码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode——零钱兑换

时间:2020-03-27 12:33:43      阅读:60      评论:0      收藏:0      [点我收藏+]

标签:mat   lis   new   组合   vat   mount   函数   leetcode   规划   

Q:给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回?-1。

示例?1:

输入: coins = [1, 2, 5], amount = 11
输出: 3
解释: 11 = 5 + 5 + 1
示例 2:

输入: coins = [2], amount = 3
输出: -1
说明:
你可以认为每种硬币的数量是无限的。

A:
第一反应是回溯我也是没谁了……然后内存就限制了我。

    public int coinChange(int[] coins, int amount) {
        if (amount == 0 || coins.length == 0)
            return 0;
        int count = 0;
        ArrayList<Integer> array = new ArrayList<>();
        coin(coins, amount, count, array);
        if (array.isEmpty())
            return -1;
        int min = Integer.MAX_VALUE;
        for (Integer i : array)
            min = Math.min(min, i);
        return min;
    }

    private void coin(int[] coins, int amount, int count, ArrayList<Integer> array) {
        if (amount == 0) {
            array.add(count);
            return;
        }
        for (Integer i : coins) {
            if (amount >= i) {
                amount -= i;
                count++;
                coin(coins, amount, count, array);
                count--;
                amount += i;
            }
        }
    }

好吧,老老实实用动态规划dp

n=0:dp[n]=0;
n<0:dp[n]=-1;
n>0:if dp[n-coin]!=-1 dp[n]=min(dp[n-coin]+1)

public int coinChange(int[] coins, int amount) {
        if (coins.length == 0 || amount == 0)
            return -1;
        int[] array = new int[amount + 1];
        Arrays.fill(array, -1);
        array[0] = 0;
        for (int i = 1; i <= amount; i++) {
            int min = Integer.MAX_VALUE;
            for (Integer in : coins) {
                if (i - in >= 0 && array[i - in] != -1) {
                    min = Math.min(min, array[i - in] + 1);
                }
                if (min != Integer.MAX_VALUE)
                    array[i] = min;
            }
        }
        return array[amount];
    }

LeetCode——零钱兑换

标签:mat   lis   new   组合   vat   mount   函数   leetcode   规划   

原文地址:https://www.cnblogs.com/xym4869/p/12580453.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!