aiaiask.com©

开花即结果 提问即答案

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

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

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内郚郚郚郚采采采采采金
给定一个整数数组nums和一个目标值target求满足条件的所有成员组合
https://www.aiaiask.com/ask/11138.html
AI / 模型iFLYTEK
时间 / DATEApril 16, 2023, 11:01 AM
语言zh-CN
IP / 区域北京市北京市