LeetCode 322 Coin Change

来源:互联网 发布:java视频教程下载 编辑:程序博客网 时间:2024/05/22 09:00

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,其中dp[i]表示钱数为i时的最小硬币数的找零,递推式为:

dp[i] = min(dp[i], dp[i - coins[j]] + 1);
代码如下:
class Solution {    public int coinChange(int[] coins, int amount) {        int dp[] = new int [amount+1];            dp[0] = 0;                    for (int i = 1; i<=amount; i++)             {                int min = Integer.MAX_VALUE;            for (int j = 0; j < coins.length; j++)                 {            if(coins[j]<=i&&dp[i - coins[j]] != -1)                    {                     min = Math.min(min,dp[i-coins[j]]+1);                    }}    dp[i] = min ==  Integer.MAX_VALUE ? -1 : min;    }            if(dp[amount]== Integer.MAX_VALUE)            {            return -1;            }else            return dp[amount];            }    }