题解 | 加起来和为目标值的组合

加起来和为目标值的组合

http://www.nowcoder.com/practice/75e6cd5b85ab41c6a7c43359a74e869a

解法一:回溯

思路步骤:

涉及到搜索所有可能的组合类型时,一般情况下都会想到用回溯法。题目中结果集不能重复,这是一个应该注意的点。

  • 开两个数组rseultpath存储结果与可能的路径集。

  • 处理递归终止情况:sum+=num[i]>target时,终止循环(sum为组合数和)

  • 利用一个num.size()大小的数组used进行去重。

  • 参考图解:
    图片说明

C++参考代码:

class Solution {
private:
        //回溯函数
    vector<vector<int>> result;//原来存储最终结果的数组
    vector<int> path;//存储符合条件的路径集
    void backtracking(vector<int>& candidates,int target,int sum,int startIndex,vector<bool>& used){
        if(sum==target){
            result.push_back(path);
            return;
        }
       //循环+剪枝   :去重的具体代码:used[i-1]==false
        //剪枝的具体代码:sum+candidates[i]<=target;
       for(int i=startIndex;i<candidates.size() && sum+candidates[i]<=target;i++){
           if(i>0 && candidates[i]==candidates[i-1] && used[i-1]==false){
               continue;
           }
           //累加求和
           sum+=candidates[i];
           path.push_back(candidates[i]);
            //更新used数组状态
           used[i]=true;
            //回溯(递归)函数调用
           backtracking(candidates, target,sum,i+1,used);
           used[i]  =false;
           sum-=candidates[i];//回溯
           path.pop_back();//回溯
       }
    }
public:
    vector<vector<int>> combinationSum2(vector<int> &num, int target) {
        vector<bool>

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

小白专属-牛客题解 文章被收录于专栏

专注于牛客平台编程题题解,文字+图解。内容很细,小白友好系列

全部评论

相关推荐

有很多问题,求大佬们解答,谢谢大佬们:不知道现在该怎么投实习,该怎么准备内心很纠结学校课程和实习到底怎么选择,&nbsp;自己也不想课程学业这边出问题,&nbsp;是不是只能投暑期实习,具体时间该怎么安排前端面试也需要准备算法么,&nbsp;自己的算法能力很薄弱,&nbsp;面试题需要准备到什么程度?没有ai项目经验的话,我该如何去补充,如何去找好的ai项目
smile丶snow:1.简历尽量一页,比如教育经历那里,全日制,计算机学院这些可以去掉没啥用好浪费空间。 熟悉三件套就没必要写了吧。js基本上是这样写 * JavaScript核心:深入理解 JS 运行机制(事件循环 Event Loop、微任务/宏任务),熟练掌握 Promise/Async 异步编程 模型。 熟悉可以改成熟练掌握。组件库写一个ant感觉就行,多写了浪费空间。 旅游项目是不是jonas的natours啊,我之前简历也有这个。我之前是这样写的 全栈思维: 熟悉 Node.js/Express 后端架构,掌握 MongoDB 数据库设计与聚合查询 工程化我觉得还是少些吧,不写就问的少,如果你真的了解的话可以写。 1.实习的话推荐大厂官网和aoob上面投,我自己有写一个校招网站的小网站可以直达~github主页上面有,顺便求个关注( 2.大三下一般课程比较少了吧,如果学校比较严的话可以多沉淀一会,如果不太严可以请dai课然后去实习,尽量找个近一些的就行。暑期实习不是暑假才实习哦,基本是上3月底4月初发offer就可以过去了,然后大概暑假的时候走转正流程答辩。 3.大厂算法题+js手写体。hot100+常见的比如数组转树,Promise.all,deepClone,之类 js手写都不难其实。算法看自己能力吧,我其实算法能力也不行。 4.自己平时没有用AI Coding吗?自己想一下怎么让AI帮你更好的写代码~比如Skill的诞生,OpenSpec的诞生,不都是我们想让AI更好帮我们写代码吗。
我的实习日记
点赞 评论 收藏
分享
评论
2
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务