当前位置: 首页 > news >正文

【练习】【子集NO.1】力扣78. 子集

题目

  1. 子集

给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。

解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。

示例 1:

输入:nums = [1,2,3]

输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]

示例 2:

输入:nums = [0]
输出:[[],[0]]

来源:力扣78. 子集


思路(注意事项)

与之前组合和分割不同的是,他们是求叶节点,而求子集是树的所有节点


纯代码

class Solution {
private:
    vector<vector<int>> ans;
    vector<int> path;
    void backtracking (vector<int>& nums, int start)
    {
        ans.push_back(path);
        if (start > nums.size()) return; //可不加

        for (int i = start; i < nums.size(); i ++)
        {
            path.push_back(nums[i]);
            backtracking(nums, i + 1);
            path.pop_back();
        }
    }   
public:
    vector<vector<int>> subsets(vector<int>& nums) {
        backtracking (nums, 0);
        return ans;
    }
};

题解(加注释)

class Solution {
private:
    vector<vector<int>> ans;  // 存储所有子集的结果
    vector<int> path;         // 存储当前递归路径中的子集

    // 回溯函数,用于生成所有子集
    void backtracking(vector<int>& nums, int start) {
        // 将当前路径中的子集加入结果
        ans.push_back(path);

        // 如果起始索引超出数组范围,直接返回
        if (start > nums.size()) return;

        // 遍历数组,从 start 开始
        for (int i = start; i < nums.size(); i++) {
            // 将当前元素加入路径
            path.push_back(nums[i]);

            // 递归调用,处理下一个元素
            backtracking(nums, i + 1);

            // 回溯:移除当前元素,尝试其他可能性
            path.pop_back();
        }
    }

public:
    // 主函数,生成所有子集
    vector<vector<int>> subsets(vector<int>& nums) {
        backtracking(nums, 0);  // 从索引 0 开始回溯
        return ans;             // 返回所有子集
    }
};

相关文章:

  • 【Research Proposal】基于提示词方法的智能体工具调用研究——难点
  • 解决 Nginx 代理后 HTTP 头部丢失的问题:以 access_token 为例
  • 蛋白质研究常用数据库系列1
  • Windows 下 Visual Studio Code 常用快捷键指南
  • IoT设备硬件攻击技术与接口漏洞利用
  • 【量化科普】Arbitrage,套利
  • The Heliosphere 日球层
  • 如何让大模型理解变量,扣子(coze)智能体中变量描述起着啥作用?程序员看了集体惊呆!扣子免费系列教程(19)
  • 记录spring-boot 3.X版本整合RocketMq
  • AMBA-CHI协议详解(二十)
  • 智慧废品回收小程序php+uniapp
  • PD协议芯片:推动快充技术革新的核心引擎
  • 了解 RAG 第二部分:经典 RAG 的工作原理
  • Java 值传递
  • 轻量级日志管理平台Grafana Loki
  • LeetCode 热题 100 11. 盛最多水的容器
  • (四)趣学设计模式 之 原型模式!
  • Web自动化之Selenium实战案例1:论文pdf自动下载
  • git 常用功能
  • DeepSeek从入门到精通
  • 成都网站建设开/现在有什么技能培训班
  • 用易语言做抢购网站软件/seo网站关键词排名优化公司
  • 太原有哪些做网站的公司/免费seo优化工具
  • 延安网站建设网络公司/集客营销软件官方网站
  • 做网站要多少钱联系方式/今日最新国内新闻重大事件
  • 微信小店可以做分类网站/中国十大企业培训公司