news 2026/7/9 12:02:54

day153—回溯—子集(LeetCode-78)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
day153—回溯—子集(LeetCode-78)

题目描述

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

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

示例 1:

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

示例 2:

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

提示:

  • 1 <= nums.length <= 10
  • -10 <= nums[i] <= 10
  • nums中的所有元素互不相同

解决方案:

这段代码的核心功能是生成一个数组的所有子集(包括空集和数组本身),采用「回溯 + 递归」的思路实现,只是把 “先不选、后选” 的顺序换成了 “先选、后不选”,最终效果完全一致。下面用简洁的语言解释整体逻辑:

核心逻辑

  1. 成员变量作用

    • t:临时数组,用于存储当前正在构造的子集(相当于 “路径”);
    • ans:最终结果数组,存储所有生成的子集。
  2. 递归函数dfs逻辑

    • 参数curr:表示当前处理到数组nums的第curr个元素;
    • 终止条件:当curr == nums.size()时,说明所有元素都处理完毕,此时t就是一个完整的子集,将其加入ans后返回;
    • 核心流程(先选后不选):①选当前元素:把nums[curr]加入临时数组t,递归处理下一个元素(curr+1);递归返回后,执行t.pop_back()恢复现场(删掉刚加入的元素,避免影响后续选择);②不选当前元素:直接递归处理下一个元素(curr+1),不对t做任何修改。
  3. 主函数subsets

    • 从第 0 个元素开始调用dfs,启动递归过程;
    • 最终返回存储了所有子集的ans

关键特点

  • 逻辑等价性:和你之前看到的 “先不选、后选” 版本功能完全一致,只是选择顺序相反,最终生成的子集顺序会略有不同(比如nums=[1,2]会生成[[1,2],[1],[2],[]],而非[[],[2],[1],[1,2]]),但都是完整的子集集合;
  • 核心思想:通过 “选(修改t后递归)+ 不选(直接递归)” 的组合,遍历所有可能的元素组合,pop_back是回溯的关键,用于恢复临时数组的状态,保证不同选择分支互不干扰。

总结

  1. 核心思路:递归遍历每个元素,对每个元素执行 “选(加入临时数组)→ 递归 → 恢复 → 不选(直接递归)” 的操作;
  2. 关键操作:t.push_back()(选元素)和t.pop_back()(恢复现场)是实现回溯的核心;
  3. 最终效果:通过递归覆盖所有元素的 “选 / 不选” 组合,最终收集到数组的全部子集。

函数源码:

class Solution { public: vector<int> t; vector<vector<int>> ans; void dfs(int curr,vector<int>& nums){ if(curr==nums.size()){ ans.push_back(t); return ; } t.push_back(nums[curr]); dfs(curr+1,nums); t.pop_back(); dfs(curr+1,nums); } vector<vector<int>> subsets(vector<int>& nums) { dfs(0,nums); return ans; } };
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/9 6:48:52

2026年职场新宠:AI产品经理!未来五年黄金职业,岗位需求激增!

一、AI产品经理-职业新机会点 近年来&#xff0c;AI 产品的外形与体验正在极速演化&#xff0c;而在 2025 年的全球科技趋势中&#xff0c;一个愈加明显的现象是&#xff1a;人工智能&#xff08;AI&#xff09;正以前所未有的深度和广度融入各行各业。如果你仔细观察这两年的…

作者头像 李华
网站建设 2026/6/29 0:13:40

录入每日三餐饮食,识别热量和营养成分,对比每日推荐摄入量,给出多吃蔬菜/少盐的精准建议。

设计一个 “每日三餐饮食营养分析与建议系统”&#xff0c;利用人工智能方法与技术课程中的知识&#xff0c;实现饮食录入、热量与营养成分识别、与每日推荐摄入量对比&#xff0c;并给出精准的健康建议&#xff08;如“多吃蔬菜”“少盐”&#xff09;。1. 实际应用场景描述现…

作者头像 李华
网站建设 2026/6/26 9:27:24

基于 YOLOv8 的茶叶病害智能识别系统[目标检测完整源码]

基于 YOLOv8 的茶叶病害智能识别系统[目标检测完整源码] 摘要 随着智慧农业与数字化种植的不断推进&#xff0c;传统依赖人工经验的茶叶病害巡检方式已难以满足规模化、精细化管理需求。本文围绕 茶叶病虫害自动识别 这一典型农业视觉场景&#xff0c;介绍了一套基于 YOLOv8 …

作者头像 李华
网站建设 2026/6/26 9:27:20

紫金桥跨平台监控组态软件:工业生产的可视化控制平台

紫金桥跨平台监控组态软件是一款专业的工业自动化软件平台&#xff0c;主要用于实现对工业生产过程的实时监控、数据采集和可视化控制。为企业提供从数据采集到应用开发的全套解决方案。一、软件核心功能1. 实时数据采集与处理 软件支持多种工业通讯协议&#xff0c;可连接PLC、…

作者头像 李华
网站建设 2026/7/2 22:21:28

Windows实用小工具,吾爱出品

今天给大家推荐两款使用率非常高的小软件&#xff0c;这两个小软件大大提高了处理文件的效率&#xff0c;有需要的小伙伴可以下载收藏。 Mp4ToGif 视频转GIF Mp4ToGif软件能把视频中的任意一部分片段&#xff0c;转换成想要的GIF格式。 软件操作方法也简单&#xff0c;选择好视…

作者头像 李华