LeetCode/零钱兑换

LeetCode/零钱兑换

动态规划

给你一个整数数组 coins,表示不同面额的硬币;以及一个整数 amount ,表示总金额。
计算并返回可以凑成总金额所需的最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回-1 。
你可以认为每种硬币的数量是无限的。

跟完全平方数解法完全一致,不过完全平方转移状态用的的是满足条件的所有平方数
而零钱兑换转移状态的是能使用的硬币面值
dp[i]为整数总面额为i时的最少硬币个数
状态转移方程dp[i]=min(dp[i-coin])+1
边界条件dp[0]=0

class Solution {public:    int coinChange(vector<int>& coins, int amount) {        vector<int> dp(amount+1);        for(int i=1;i<=amount;i++){            int min_=INT_MAX;            for(auto &x:coins){                if(i-x>=0&&dp[i-x]!=-1)                  min_=min(min_,dp[i-x]);            }            if(min_==INT_MAX) dp[i]=-1;            else dp[i]=min_+1;        }        return dp[amount];    }};
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部