https://leetcode.com/problems/coin-change-2/description/
完全背包吧,然后两重循环的次序需要注意。
最外层一定是coins
如果外层是amount,那么比如amount=3会在coin1和coin2分别+=dp[1], +=dp[2]
这两种其实都是2+1的情况 导致重复
class Solution {
public:
int change(int amount, vector<int>& coins) {
int dp[amount+1];
memset(dp, 0, sizeof(dp));
/*
for (int i = 0; i < coins.size(); i++) {
dp[ coins[i] ] = 1;
}
*/
dp[0]=1;
for (int j = 0; j < coins.size(); j++) {
for (int i = 1; i <= amount; i++ ) {
if (i >= coins[j]) {
dp[i] += dp[i - coins[j]] ;
// cout << dp[i - coins[j]] << "->" << i-coins[j] << "->" << dp[i] << " i:" << i << endl;
}
}
}
return dp[amount];
}
};