LeetCode第39题(组合总和)

简介: LeetCode第39题要求找出一个无重复元素整数数组中所有和为给定目标数的不同组合,可以使用回溯法解决。

题目描述:

给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。

candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是不同的。

对于给定的输入,保证和为 target 的不同组合数少于 150 个。

示例 1:

输入:candidates = [2,3,6,7], target = 7
输出:[[2,2,3],[7]]
解释:
2 和 3 可以形成一组候选,2 + 2 + 3 = 7 。注意 2 可以使用多次。
7 也是一个候选, 7 = 7 。
仅有这两种组合。
示例 2:

输入: candidates = [2,3,5], target = 8
输出: [[2,2,2,2],[2,3,3],[3,5]]
示例 3:

输入: candidates = [2], target = 1
输出: []

class Solution {
    vector<vector<int>> ans;
    vector<int> combine;
public:
    vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
        dfs(candidates,target,0);
        return ans;
    }

    void dfs(vector<int>& candidates,int target,int idx){
        //将符合条件的组合添加至结果变量
        if(target == 0){
            ans.push_back(combine);
            return;
        }
        //数组搜索到数组末尾后返回
        if(idx == candidates.size()) return;

        //深搜下一个数字
        dfs(candidates, target,idx + 1);
        //将当前数字添加至combine,后继续从当前数字深搜
        if(target >= candidates[idx]){
            combine.push_back(candidates[idx]);
            dfs(candidates,target - candidates[idx],idx);
            combine.pop_back();
        }
    }
};

DFS示例部分图解:

相关文章
|
存储 Go 容器
【golang】对键值有顺序要求时,不要使用 map
【golang】对键值有顺序要求时,不要使用 map
490 0
|
网络协议 安全 网络安全
HTTP与HTTPS协议入门
HTTP协议是互联网的基石,HTTPS则是其安全版本。HTTP基于TCP/IP协议,属于应用层协议,不涉及数据包传输细节,主要规定客户端与服务器的通信格式,默认端口为80。
805 25
HTTP与HTTPS协议入门
|
前端开发 JavaScript API
JavaScript逆向爬取实战——使用Python实现列表页内容爬取(一)
JavaScript逆向爬取实战——使用Python实现列表页内容爬取(一)
271 1
|
存储 缓存 安全
Go Channel详解
Go Channel详解
768 1
|
算法 安全 Java
小白都能看懂的CAS基本原理与实战应用指南
小白都能看懂的CAS基本原理与实战应用指南
1782 1
|
Java 测试技术 持续交付
老司机使用CompletableFuture实现集成任务失败后自动重跑
0 老司机集成任务在Aone实验室中遇到的问题  老司机平台是一个集合了用例管理,用例执行,测试沉淀等功能的一站式集成测试平台。老司机中提供了一种名为集成任务的测试件,它一般包含一组核心的可执行用例,主要在变更发布前回归指定的接口或应用时由平台或手工触发运行。也可以在每日定时执行指定的集成任务,以实现用例与测试任务的持续集成。  集成任务用作发布前的卡点测试件时,一般是在流水线中加入Aone实验室
1750 1
老司机使用CompletableFuture实现集成任务失败后自动重跑
|
安全 Go
为什么遍历 Go map 是无序的?原生map为什么是非线程安全的?
为什么遍历 Go map 是无序的?原生map为什么是非线程安全的?
758 0
为什么遍历 Go map 是无序的?原生map为什么是非线程安全的?
|
缓存 NoSQL Redis
Redis缓存穿透、缓存击穿、缓存雪崩详解及解决方法
Redis缓存穿透、缓存击穿、缓存雪崩详解及解决方法
3958 1
|
存储 算法 Go
深入理解 Go 语言的 map 实现原理
一直很好奇 Go 语言的 map 底层是如何实现的。 Go map 的形式就是键值对,给定一个键,能尽快的找到对应的值。
|
自然语言处理
中文自然语言处理数据集:ChineseNLPCorpus(附链接)
本文为你推荐中文自然语言处理数据集。
5655 0