零钱兑换2
代码
class Solution {
public:
    int change(int amount, vector<int>& coins) {
        vector<int> dp(amount + 1, 0<details>
        dp[0] = 1;
        for (int j = 0; j <= amount; ++j) {
            for (int i = 0; i < coins.size(); ++i)
                if (j >= coins[i]) { dp[j] += dp[j - coins[i]];
                cout << "dp[" << j << "] += dp[" << j - coins[i] << "]" << endl;}
        }
        return dp[amount];
    }
};
详解
以测试数据 5 【1,2,5】为例
- 组合数,外层遍历coins(i)dp[1] += dp[0] dp[2] += dp[1] dp[3] += dp[2] dp[4] += dp[3] dp[5] += dp[4] dp[2] += dp[0] dp[3] += dp[1] dp[4] += dp[2] dp[5] += dp[3] dp[5] += dp[0]
- 排列数,外层遍历amount(j)dp[1] += dp[0] dp[2] += dp[1] dp[2] += dp[0] dp[3] += dp[2] dp[3] += dp[1] dp[4] += dp[3] dp[4] += dp[2] dp[5] += dp[4] dp[5] += dp[3] dp[5] += dp[0]
 
                    
                 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号