☆☆☆**: 排序剪枝後效率更高 ~
classsolution
//難點是如何去除重複的組合
//(每次i從0開始搜尋) 去重前 : [ [2,2,2,2],[2,3,3],[3,2,3],[3,3,2],[3,5],[5,3] ]
//(每次 i 從index開始搜尋)去重後 : [ [2,2,2,2],[2,3,3],[3,5] ]
//優化前: 4ms
//優化後(排序+剪枝):2ms
private
void dfs(int nums,int start, int target, listlist, list>res)
for (int i = start; i < nums.length; i++)
}/*** 回溯寫法2:做選擇
* 優化前:4ms
* 優化(排序+剪枝):2ms
*/private
void dfs1(int nums, int index, int target, listlist, list>res)
//if (target < 0) return;
//優化前剪枝
if (target < nums[index]) return; //
優化後剪枝 candidates排序後,target小於當前的值就不用往後算了
list.add(nums[index]);
dfs1(nums, index, target -nums[index], list, res);
list.remove(list.size() - 1);
dfs1(nums, index + 1, target, list, res);}}
LeetCode 39 組合總和
給定乙個無重複元素的陣列candidates和乙個目標數target,找出candidates中所有可以使數字和為target的組合。candidates中的數字可以無限制重複被選取。說明 示例 1 輸入 candidates 2,3,6,7 target 7,所求解集為 7 2,2,3 示例 2 ...
leetcode39 組合總和
參考 class solution if next num.size target num next 0 邊界條件 return 對於每個元素,有兩種處理方式,選當前元素或者不選當前元素 psol.push back num next 選當前元素 search num,next,psol,targe...
LeetCode39組合總和
給定乙個無重複元素的陣列 candidates 和乙個目標數 target 找出 candidates 中所有可以使數字和為 target 的組合。candidates 中的數字可以無限制重複被選取。說明 所有數字 包括 target 都是正整數。解集不能包含重複的組合。示例 1 輸入 candid...