leetcode322. Coin Change

来源:互联网 发布:worms w.m.d mac 编辑:程序博客网 时间:2024/05/29 20:01

题目

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]表示钱总数为i时的最少零钱个数,转移方程为:dp[i] = min(dp[i], dp[i - coins[j]] + 1),能到达当前i
状态只能是从i-coins[j]过来的,因此遍历取最小值

代码

int coinChange(vector<int>& coins, int amount) {        int Max = amount + 1;        vector<int> dp(amount + 1, Max);        dp[0] = 0;        for (int i = 1; i <= amount; i++) {            for (int j = 0; j < coins.size(); j++) {                if (coins[j] <= i) {                    dp[i] = min(dp[i], dp[i - coins[j]] + 1);                }            }        }        return dp[amount] > amount ? -1 : dp[amount];    }
0 0
原创粉丝点击