• 创作工场专业版,一问多答!更智能、更完整、更原创
  • 这是一个超强内容创作平台,它会写文章、做设计、绘图、敲代码,有问必答!
🔥点击使用-高级专业版🔥

给定一个整数数组nums和一个目标值target求满足条件的所有成员组合

时间2023-04-16 11:01:52 提问来自 北京市北京市 的网友 分类创作 浏览264
class Solution { public: vector<vector<int>> combinationSum(vector<int>& nums, int target) { vector<vector<int>> res; vector<int> tmp; sort(nums.begin(),nums.end()); backtracking(res,tmp,nums,target,0); return res; } void backtracking(vector<vector<int>> &res , vector <int> &tmp , vector <int> nums , int target , int start){ if (target == 0){ res.push_back(tmp); //找到组合,将其存入结果中 return ; //返回上一层,寻找下一个组合 回溯法的核心思想是从一条路径出发,走到尽头,然后在退回来的时候再尝试新的路径 所以return表示退回上一层 再去看新的路径是否更优 这里就是 看看有没有新的组合更优 这里不能用break ! 因为要将所有可能的情况都考虑进去 break只能退出当前循环 这里需要递归 需要整体退出 } //也可以理解成 把整个问题分成了多层子问题 某些子问题不行 那么就return 并将它舍弃 用于对应层数+1 的for循环中去遍历其他情况 for ( int i = start ; i < nums.size(); i++ ){ //start表示当前层数 用于for循环遍历时标志住当前位子 start=0表明是在最底层开始遍历 注意start=i+1 表明如果当前位子不行 需要舍弃它并且在此处加1进入下一位子 依此迭代 if (target - nums[i] < 0 ) break; //如果减完之后小于0直接break break用在for循环中 如果不加break for会将i++直到nums.size()-1然后内部if语句会发生错误 continue用在while或者for中 表明此处不执行 此处continue相当于般弃此条件并把i+1 continue由内而外作用 while/for-->if-->continue-->while/for -->.... break也是以此方式作用 while/for-->if-->break-->while/fro -->.... tmp.push_back(nums[i]); //保存当前条件 push_back()方法是C++ STL Vector容器特有的方法:将元素加到Vector容器的末端。 pop_back()方法也是Vector特有的方法:将Vector容器中末端的元素删除。 backtracking (res , tmp , nums , target - nums[i] , i ); //迭代 采甲DFS思想 DFS即Depth First Search即”深度优先”遍历。DFS使甩使甩使⽤⼿Stack数据⽬标来存傩傩傩傩傩傩傩傩傩傩傲保存已被”访问”但尚未”处理”之Node。 DFS使⽤⾏row-by-row、level-by-level、depth-by-depth之方式侵侵侵侵侵侵侵侵㊣㊣㊣㊣㊣㊣㊣㊣❸❸❸❸❸❸❸遗遗遗遗遗遗╦╦╦╦╦╦╦浅浅浅浅浅浅浅浅┐┐┐┐┐┐────────────────────traverse Tree Structure、Graph Structure或General Tree Structure。 DFS常常采⽤Recursive Function Call之方式呈呈呈呈呈呈见implement Recursive Function Call即”递归函数调⽤”。Recursive Function Call即Function A内郚郚郚郚采采采采采金

点击这里,进行内容创作

创作工场 免责声明:
以上内容除特别注明外均来源于网友提问,创作工场回答,未经许可,严谨转载。
点击这里>>使用🔥专业版,更聪明、更完整、更原创!

上一篇 高考语文阅读理解答题技巧 下一篇 请进一步思考兴趣,并反思个人兴趣是怎么影响现在的专业和未来的职业选择?