每周LeetCode算法题(十一) 题目: 322. Coin Change

来源:互联网 发布:农村淘宝网址是多少 编辑:程序博客网 时间:2024/06/05 07:51

每周LeetCode算法题(十一)

题目: 322. Coin Change

You are given coins of different denominations and a total amount of money amount. Write a function to compute the fewest number of coins that you need to make up that amount. If that amount of money cannot be made up by any combination of the coins, return -1.

Example 1:
coins = [1, 2, 5], amount = 11
return 3 (11 = 5 + 5 + 1)

Example 2:
coins = [2], amount = 3
return -1.

解法分析

仍然是动态规划。当前数量的额度dp[i]如果还没设定过,或者能由更少数量钱币dp[i - coin[j]]凑成,就设成dp[i - coin[j]] + 1.

C++代码

class Solution {public:    int coinChange(vector<int>& coins, int amount) {        int * dp = new int[amount + 1];        memset(dp, -1, sizeof(int) * (amount + 1));        dp[0] = 0;        for (int i = 1; i <= amount; i++) {            for (int j = 0; j < coins.size(); j++) {                if (i >= coins[j]) {                    if ((dp[i] == -1 || dp[i] > dp[i - coins[j]] + 1) && dp[i - coins[j]] != -1) {                        dp[i] = dp[i - coins[j]] + 1;                    }                }            }        }        return dp[amount];    }};
原创粉丝点击