LeetCode518. 零钱兑换 II

题目

分析

此题组合问题,首先看能否回溯,数据范围太大,会超时。题目中说一种面额的硬币有无限个,本题为完全背包。本题与LeetCode 494目标和问题几乎一样。

dp[j]表示凑成总额 j 的种类。dp[0]  = 1表示总额0不取任何硬币,这也是一种方法,所以为1,若初始值设为0,那么dp数组全为0。递推公式:dp[j] += dp[j-coins[i]]

动态规划求组合类常用的递推公式。

代码

class Solution {
public:
    int change(int amount, vector<int>& coins) {
        vector<int>dp(amount+1,0);
        dp[0] = 1;
        //先遍历背包再遍历容量(即面值)
        for(int i = 0;i < coins.size();i++){
            for(int j = coins[i];j <= amount ;j++){
                dp[j] += dp[j-coins[i]];
            }
        }
        return dp[amount];
    }
};

 

posted @ 2021-02-16 22:17  Uitachi  阅读(42)  评论(0编辑  收藏  举报