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

每周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];
    }
};

你可能感兴趣的:(leetcode)