这是一个动态规划的题目, 可以划分为两部分求解, 一部分是dp[i - 1][j],另一部分是dp[i][j - coins[i-1]](coins[i-1]代表
第i个coin的币值, dp[i][j] = dp[i - 1][j] + dp[i][j-coins[i-1]]
class Solution {
public:
int change(int amount, vector<int>& coins) {
int length = coins.size();
vector<vector<int>>dp(length + 1, vector<int>(amount + 1, 0));
dp[0][0] = 1;
for (int i = 1; i <= length; ++i)
{
dp[i][0] = 1;
for (int j = 1; j <= amount; ++j)
{
dp[i][j] = dp[i - 1][j] + (j >= coins[i - 1] ? dp[i][j - coins[i - 1]] : 0);
}
}
return dp[length][amount];
}
};
空间简化为一维数组的解为:
class Solution {
public:
int change(int amount, vector<int>& coins) {
int length = coins.size();
vector<int> dp(amount + 1, 0);
dp[0] = 1;
for (int i = 1; i <= length; ++i)
{
for (int j = 1; j <= amount; ++j)
{
if (j >= coins[i - 1])
dp[j] = dp[j] + dp[j - coins[i - 1]];
}
}
return dp[amount];
}
};