【算法】递归+回溯+剪枝:78.子集

目录

1、题目链接

2、题目

3、解法(回溯+剪枝)

4、代码


1、题目链接

78.子集(LeetCode)

2、题目

3、解法(回溯+剪枝)

思路:

枚举子集(答案)的第一个数选谁,第二个数选谁,第三个数选谁,依此类推。

dfs 中的 i 表示现在要枚举选 numsi 到 numsn−1 中的一个数,添加到 path 末尾。

如果选 numsj 添加到 path 末尾,那么下一个要添加到 path 末尾的数,就要在 numsj+1 到 numsn−1 中枚举了。

注意:不需要在回溯中判断 i=n 的边界情况,因为此时不会进入循环,if i == n: return 这句话写不写都一样。

4、代码

cpp 复制代码
class Solution {
public:

    vector<int> path;       //存储当前路径
    vector<vector<int>> ans;//结果集

    void dfs( vector<int>& nums, int pos)//pos层数
    {
        ans.push_back(path);//增加结果集
          
        for(int i = pos; i < nums.size();i++ )
        {
            path.push_back(nums[i]);
            dfs(nums,i+1);//深搜
            path.pop_back();//回溯
        }
    }
    vector<vector<int>> subsets(vector<int>& nums) {
        dfs(nums,0);
        return ans;
    }
};
相关推荐
INGNIGHT10 分钟前
1908 · 布尔表达式求值(stack单调栈&dfs)
开发语言·c++·算法
lucas_AI27 分钟前
把表格压成 64 个 token,长文档问答反而更准了:先找表,再看数
人工智能·深度学习·算法
Zzz 小生1 小时前
Lazy Theta*:把昂贵的视线检测留到“真正需要”时再做
人工智能·算法·贪心算法·推荐算法
罗西的思考1 小时前
【OpenClaw具身硬件】ZeroClaw 源码阅读笔记(1)— 总体
人工智能·笔记·深度学习·机器学习
l1258651 小时前
# LangGraph Deep Research Agent 全流程设计:多轮研究、人机协同与真实来源管理
数据库·人工智能·python·算法·自然语言处理·oracle·langchain
BFT白芙堂2 小时前
Franka & DROID :面向真实场景的机器人操作数据集
人工智能·学习·机器学习·机器人·具身智能·franka·robotiq
青少儿编程课堂2 小时前
图形化编程实战:智能交通灯调度台,一个作品讲透循环、条件与广播
c++·python·算法·bfs·信息学竞赛
evans在进步2 小时前
LeetCode 438 找到字符串中所有字母异位词:滑动窗口与排序解法详解
算法·leetcode·职场和发展
M78佐菲2 小时前
Linux多线程:创建、回收与互斥同步
linux·笔记·学习·算法
小手cool2 小时前
使用递归对数组进行反转操作
java·数据结构·算法