LeetCode 子集

原题链接78. 子集 - 力扣(LeetCode)

这是一道暴力搜索问题参考大佬们的题解,对这类题目做出一下总结

1.确定递归参数变量

2.递归结束条件

3.做出选择,递归调用进入下一层

4.回溯,返回到递归前的状态

要完成前面这几步有一个重要的前提条件,你要确定采用什么样式的递归,这个来源于解题经验,

这道题采用顺序递归(我想的名字),举个例子,1,2,3,如果我先选了1,那么按照从左到右的顺序剩下的子集里可选的就是2,3,我下面要从2,3当中选一个,如果选2,那么按照从左到右的顺序,下面可选的子集就只有3.

如果我选3呢,那么按照从左到右的顺序,剩下的子集里就没有可选的了,因为从左到右吗,2被我们跳过了,选了3之后就该选3后面的

cpp 复制代码
class Solution {
private: vector<vector<int>>res;
    void backtrack(vector<int>num,vector<int>& ans,int start)
    {//终止条件
        res.push_back(ans);//这里在最开始的时候压入了一个空集合
        for (int i = start; i < num.size(); i++)
        {
            ans.push_back(num[i]);
            backtrack(num, ans, i + 1);
            ans.pop_back();//弹出最后一个元素,就是我们刚才压入的元素
        }
    }
public:
    vector<vector<int>> subsets(vector<int>& nums) {
        vector<int>ans;
       
        backtrack(nums, ans, 0);
        return res;
    }
};
相关推荐
北域码匠20 小时前
深度优先搜索算法(DFS)超全详解|原理+流程+性能分析+完整C#源码(无第三方库)
dfs·二叉树遍历·回溯算法·深度优先搜索·图论算法·面试算法·c# 算法
hold?fish:palm20 小时前
RDB全量快照备份
c++·redis·后端
什巳20 小时前
JAVA练习306- 翻转二叉树
java·数据结构·算法·leetcode
smj2302_7968265220 小时前
解决leetcode第3989题网格中保持一致的最大列数
python·算法·leetcode
盐焗鹌鹑蛋21 小时前
【C++】C++11:列表初始化、声明、STL升级
c++
巧克力男孩dd1 天前
Python超典型练习题(第一次作业)
开发语言·python·算法
爱刷碗的苏泓舒1 天前
平方根信息滤波:矩阵推导及 GNSS 参数估计应用
线性代数·算法·矩阵·gnss·参数估计·测量平差·平方根信息滤波
想做小南娘,发现自己是女生喵1 天前
第 2 章 顺序表和 vector
java·数据结构·算法
ComputerInBook1 天前
c 和 c++ 中的宏块(macro)
c语言·c++··宏块·宏指令
艾醒1 天前
2026年第29周(7.13-7.19)AI全复盘:技术突破、行业趣闻翻车、算力服务器商业动态
人工智能·算法