Coin Change

来源:互联网 发布:域名紧急升级 编辑:程序博客网 时间:2024/05/25 21:34

题目:

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.

class Solution {public:    int coinChange(vector<int>& coins, int amount) {        int len=coins.size();        if(len<=0 || amount<0) return -1;        if(amount==0) return 0;        //对初始输入的处理        vector<int> number(amount+1);  //动态规划典型数组        vector<int> temp(len);         //用于判断选择哪个硬币,选择的原则是,选定该硬币后,数量最小        for(int i=0;i<len;i++)        {            number[i]=-1;        }        number[0]=0;                   //零个硬币可以凑齐0金额        for(int i=1;i<=amount;i++)     //从少往多,计算所有金额的硬币组成方案        {            //从所有选择硬币的方案中选择出,硬币数目最小的方案            //1.针对方案中选择某种硬币的情况,进行讨论//            for(int j=0;j<len;j++)                 {                 if((i-coins[j]>=0)&&(number[(i-coins[j])]!=-1))   //选择某个硬币组成方案,是否可行呢?可行的条件有两个:                                                                                            //1、减去该硬币后,金额依旧大于0                {                                                  //2、减去该硬币后,剩余金额有可行方案                    temp[j]=number[i-coins[j]]+1;                                 }                else                {                    temp[j]=-1;                }            }           //2.选出最优方案//            int min=INT_MAX;            for(int j=0;j<len;j++)                {                if((temp[j]!=-1)&&(temp[j]<min))                {                    min=temp[j];                }            }            if(min==INT_MAX)                                 {                number[i]=-1;            }            else            {                number[i]=min;            }            ////////end////////////////        }        return number[amount];    }};


原创粉丝点击