class Solution {
public:
int coinChange(vector<int>& coins, int amount) {
auto mo=unordered_set<int>();
for(auto k : coins)
{
mo.insert(k);
}
vector<int>dp(amount+1,-1);
dp[0]=0;
for(int i=1;i<=amount;i++)
{
for(int j=0;j<i;j++)
{
if(dp[j]!=-1&&mo.find(i-j)!=mo.end())
{
if(dp[i]!=-1)
dp[i]=min(dp[i],dp[j]+1);
else
dp[i]=dp[j]+1;
}
}
}
return dp[amount];
}
};
仿着单词拆分写的,超时了
class Solution {
public:
int coinChange(vector<int>& coins, int amount) {
int mx=amount+1;
vector<int>dp(amount+1,mx);
dp[0]=0;
for(int i=1;i<=amount;++i)
{
for(int j=0;j<(int)coins.size();++j)
{
if(coins[j]<=i)
dp[i]=min(dp[i],dp[i-coins[j]]+1);
}
}
return dp[amount]>amount?-1:dp[amount];
}
};
这是数字,只要考虑要不要用某一零钱即可,
哈哈哈哈哈哈,又被自己蠢笑了