518. Coin Change 2

class Solution {
public:
int change(int amount, vector<int>& coins) {
vector<int> dp(amount + 1, 0);
dp[0] = 1;
for(auto coin : coins) {
for(int jj = coin; jj <= amount; jj++) {
dp[jj] += dp[jj - coin];
}
}
return dp[amount];
}
};

class Solution {
public:
int change(int amount, vector<int>& coins) {
vector<vector<int> > dp(coins.size() + 1, vector<int>(amount + 1, 0));
dp[0][0] = 1;
for(int ii = 1; ii <= coins.size(); ii++) {
for(int jj = 0; jj <= amount; jj++) {
dp[ii][jj] = dp[ii - 1][jj];
if(jj >= coins[ii-1]) dp[ii][jj] += dp[ii][jj - coins[ii-1]];
}
}
return dp[coins.size()][amount];
}
};