39. 组合总和020(思路+详解)
生活随笔
收集整理的這篇文章主要介紹了
39. 组合总和020(思路+详解)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一:題目:
給定一個(gè)無(wú)重復(fù)元素的正整數(shù)數(shù)組 candidates 和一個(gè)正整數(shù) target ,找出 candidates 中所有可以使數(shù)字和為目標(biāo)數(shù) target 的唯一組合。
candidates 中的數(shù)字可以無(wú)限制重復(fù)被選取。如果至少一個(gè)所選數(shù)字?jǐn)?shù)量不同,則兩種組合是唯一的。
對(duì)于給定的輸入,保證和為 target 的唯一組合數(shù)少于 150 個(gè)。
示例 1:輸入: candidates = [2,3,6,7], target = 7 輸出: [[7],[2,2,3]] 示例 2:輸入: candidates = [2,3,5], target = 8 輸出: [[2,2,2,2],[2,3,3],[3,5]] 示例 3:輸入: candidates = [2], target = 1 輸出: [] 示例 4:輸入: candidates = [1], target = 1 輸出: [[1]] 示例 5:輸入: candidates = [1], target = 2 輸出: [[1,1]]二:思路
思路:
<1>:遞歸函數(shù)的遞歸參數(shù)為
backtacking(vector &v,int target);
<2>:遞歸的結(jié)果
vector<vector> ans;//裝入所有的可行解
vector path;每次遞歸將一個(gè)值裝入容器中
<3>:遞歸終止條件
accumulate(path.begin(),path.end(),0) == target
<4>:單層橫向的for循環(huán)為遍歷容器的元素,縱向?yàn)檫f歸深度
三:上碼
class Solution { public:vector<vector<int> >ans;vector<int>path;void backtacking(vector<int>& v,int num,int index){int sum = accumulate(path.begin(),path.end(),0);if(sum > num){return ;}if(sum == num){ans.push_back(path);return ;}for(int i = index; i < v.size(); i++){path.push_back(v[i]);backtacking(v,num,i);//這里加上index可以避免重復(fù)path.pop_back();}}vector<vector<int>> combinationSum(vector<int>& candidates, int target) {/**思路:<1>:遞歸函數(shù)的遞歸參數(shù)為backtacking(vector<int> &v,int target);<2>:遞歸的結(jié)果vector<vector<int >> ans;//裝入所有的可行解vector<int> path;每次遞歸將一個(gè)值裝入容器中<3>:遞歸終止條件accumulate(path.begin(),path.end(),0) == target<4>:單層橫向的for循環(huán)為遍歷容器的元素,縱向?yàn)檫f歸深度 */backtacking(candidates,target,0);return ans;} };
加油 寶!!!
總結(jié)
以上是生活随笔為你收集整理的39. 组合总和020(思路+详解)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: PrivaZer如何设置定时清理 Pri
- 下一篇: 40. 组合总和 II021(回溯法)