349,組合總和

2022-09-18 09:42:10 字數 1535 閱讀 7277

給定乙個由正整數組成且不存在重複數字的陣列,找出和為給定目標正整數的組合的個數。

示例:

nums = [1, 2, 3] t

arget = 4

所有可能的組合為:

(1, 1, 1, 1)

(1, 1, 2)

(1, 2, 1)

(1, 3)

(2, 1, 1)

(2, 2)

(3, 1)

請注意,順序不同的序列被視作不同的組合。

因此輸出為 7。

答案:

public

intcombinationsum4

(int

nums,

int target)

, count)

;return count[0]

;}private

void

helper

(int

nums,

int[

] target,

int[

] count)

if(target[0]

>0)

for(

int i =

0; i < nums.length; i++

)}

解析:這種是遞迴加回溯的方式,前面也講過很多這種類似的題的,也很容易理解,但這種遞迴效率實在是很差,我們還可以在改進一下,減少重複計算

public

intcombinationsum4

(int

nums,

int target)

private

inthelper

(int

nums,

int target, map

map)

return res;

}

即便是這樣,但因為遞迴的使用,導致執行效率還不是很高,我們可以考慮一下動態規劃的使用

public

intcombinationsum4

(int

nums,

int target)}}

return dp[target]

;}

這個非常類似於揹包問題,但揹包問題有數量上的限制,而這道題沒有。我們還以上面舉的例子,畫個圖來加深一下理解,我們可以把它當成一棵樹,每個節點最多有nums.length個子節點。

我們看到樹中有大量的子樹重複,上面**是按照從樹的底往上進行計算的,如果想要從上往下計算我們就要使用遞迴的方式了,也就是前面兩種解法的答案。

349,組合總和

給定乙個由正整數組成且不存在重複數字的陣列,找出和為給定目標正整數的組合的個數。示例 nums 1,2,3 t arget 4 所有可能的組合為 1,1,1,1 1,1,2 1,2,1 1,3 2,1,1 2,2 3,1 請注意,順序不同的序列被視作不同的組合。因此輸出為 7。答案 public i...

39 組合總和

給定乙個無重複元素的陣列 candidates 和乙個目標數 target 找出 candidates 中所有可以使數字和為 target 的組合。candidates 中的數字可以無限制重複被選取。說明 示例 1 輸入 candidates 2,3,6,7 target 7,所求解集為 7 2,2...

39 組合總和

給定乙個無重複元素的陣列candidates和乙個目標數target,找出candidates中所有可以使數字和為target的組合。candidates中的數字可以無限制重複被選取。說明 示例 1 輸入 candidates 2,3,6,7 target 7,所求解集為 7 2,2,3 示例 2 ...