leetcode 377. 組合總和Ⅳ 中等 動態規劃

題目:
在這裏插入圖片描述

分析:一看題目發現和另一題很像,這樣的組合總問題和零錢兌換很類似,不過是換了一個表述而已,零錢兌換可看這裏,零錢兌換裏要求的是所求金額的組合的最小硬幣數,我們的做法是從1遍歷到所求金額,求出所有金額的解,但該問題求的組合的最小硬幣數。這道題求的是組合數,但零錢兌換中其實就求了所有的解,那我們只要用同樣的算法,不過這次記錄的是組合的數量即可
注意: 順序不同的序列被視作不同的組合這個條件剛好就對應與所有的解,如果用回溯的方法像求不同序列視作同一組合的話會超時

代碼:

class Solution {
    public int combinationSum4(int[] nums, int target) {
        if(nums == null || nums.length == 0){
            return 0;
        }
        Arrays.sort(nums);
        int[] dp = new int[target+1];
        dp[0] = 1;
        for(int i = 1; i <= target; i++){
        	//因爲每次都從頭遍歷nums,所以考慮了所有的組合情況
            for(int j = 0; j < nums.length; j++){
                if(nums[j] <= i){
                    dp[i] += dp[i-nums[j]];
                }
            }
        }
        return dp[target];
    }
}

在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章