【LeetCode-322】Coin Change

来源:互联网 发布:软件合作开发合同范本 编辑:程序博客网 时间:2024/05/22 06:48

原题:

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.

Note:
You may assume that you have an infinite number of each kind of coin.


题目大意:

给一个硬币面值数组,给一个整数值amount,问最少需要多少个硬币能组成这个值,假设硬币个数无限。


思路:

典型DP吧应该是,dp[i]=min(dp[i],dp[i-coins[j]]+1),差不多这个意思,可能我的想法比较简单算法复杂度会高,嘛不过至少AC了_(:з」∠)_。


代码:

int coinChange(int* coins, int coinsSize, int amount) {    int dp[amount+1];    dp[0]=0;    for (int i=1;i<=amount;i++)    {        dp[i]=INT_MAX-1;    }        for (int i=0;i<coinsSize;i++)        if (coins[i]<=amount)            dp[coins[i]]=1;        for (int i=1;i<=amount;i++)        for (int j=0;j<coinsSize;j++)            if (i-coins[j]>0)            {                if (dp[i]>dp[i-coins[j]]+1)                    dp[i] = dp[i-coins[j]]+1;            }    if (dp[amount]==INT_MAX-1)        return -1;    return dp[amount];}


0 0