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; } };

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1185045.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Fastapi全面教程:常用 API 串联与实战指南

大家好&#xff0c;我是jobleap.cn的小九。在生产环境下&#xff0c;我们不再简单地使用 uvicorn main:app&#xff0c;而是需要考虑进程守护、多核并发、故障自启以及特权端口管理。 &#x1f6e0; 方案一&#xff1a;PM2 方案&#xff08;最简单、全能&#xff09; PM2 本是 …

Python系列Bug修复|如何解决 pip install 安装报错 ModuleNotFoundError: No module named ‘websockets’ 问题

摘要 你在使用pip安装/运行websockets时遇到ModuleNotFoundError: No module named websockets报错&#xff0c;该问题核心诱因是环境一致性问题&#xff08;pip与python版本错位&#xff0c;占比40%&#xff09; 模块名拼写错误&#xff08;单数/复数混淆&#xff0c;占比10%…

【图像去噪】基于均值+中值+软硬阙值小波变换图像去噪附Matlab代码

✅作者简介&#xff1a;热爱数据处理、建模、算法设计的Matlab仿真开发者。&#x1f34e;更多Matlab代码及仿真咨询内容点击 &#x1f517;&#xff1a;Matlab科研工作室&#x1f34a;个人信条&#xff1a;格物致知。&#x1f525; 内容介绍一、技术背景与核心目标图像去噪是数…

2026 年 1 月环氧地坪漆厂家推荐排行榜,环氧彩砂自流平,防静电/水性/室内/车间/车库环氧地坪漆,专业施工与持久耐磨品质之选 - 企业推荐官【官方】

2026年1月环氧地坪漆厂家推荐排行榜:专业施工与持久耐磨品质之选 随着现代工业、商业及公共设施对地面环境要求的日益提升,环氧地坪漆及其衍生系统,如环氧彩砂自流平、防静电环氧地坪漆、水性环氧地坪漆等,已成为保…

2026深圳GEO服务商评测指南:技术实力与实战效果双维度解析

2026年生成式AI技术的商业变现深度落地&#xff0c;推动GEO&#xff08;生成式引擎优化&#xff09;成为深圳企业布局智能流量、构建数字化竞争优势的核心战略。作为粤港澳大湾区科创核心&#xff0c;深圳集聚了海量科创企业、跨境电商龙头、金融科技机构及中小微商户&#xff…

完整教程:专题:2025年脑机接口产业蓝皮书:市场规模、专利技术、投融资与临床应用|附40+份报告PDF、数据、可视化模板汇总下载

完整教程:专题:2025年脑机接口产业蓝皮书:市场规模、专利技术、投融资与临床应用|附40+份报告PDF、数据、可视化模板汇总下载pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto …

基于 YOLOv8 的猪只行为智能识别系统实践[目标检测完整源码]

基于 YOLOv8 的猪只行为智能识别系统实践[目标检测完整源码] 一、项目背景与问题引入 在规模化养殖场中&#xff0c;猪只的进食、饮水、休息及异常行为直接关系到生长效率、健康水平和疾病预警。然而&#xff0c;传统人工巡检方式存在明显短板&#xff1a; 人力成本高&#…

如何解决 Error Get “https://registry-1.docker.io/v2/”: dial tcp xxx.xx.1xx:443: connect: connection time

摘要 你在使用Docker拉取镜像时遇到了Get "https://registry-1.docker.io/v2/": dial tcp xxx.xx.1xx:443: connect: connection timed out错误&#xff0c;该问题核心诱因是Docker官方镜像仓库&#xff08;Docker Hub&#xff09;网络访问受限&#xff08;占比80%&…

AI 写代码越快越危险?破解“高产低质”困局,这一步至关重要

一、 软件开发的核心命题&#xff1a;建立正反馈系统软件开发绕不开三大核心困境&#xff1a; 闭门研发缺反馈、功能跑偏难修正&#xff1b; 独自攻坚易内耗&#xff0c;重复造轮耗精力&#xff1b; 价值难显缺认可&#xff0c;能力成长无动力&#xff0c;如同孤身爬山&#xf…

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

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

Python系列Bug修复|如何解决 pip install 安装报错 ModuleNotFoundError: No module named ‘trio’ 问题

摘要 你在使用pip安装/运行trio时遇到ModuleNotFoundError: No module named trio报错&#xff0c;该问题核心诱因是环境一致性问题&#xff08;pip与python版本错位&#xff0c;占比45%&#xff09; 安装不完整 权限不足 虚拟环境未激活 Python版本不兼容 缓存损坏&#…

别把 Cursor 只当代码补全工具!这样做,让 AI 真正读懂你的项目架构

在 AI 代码协作时代&#xff0c;Cursor 不再只是一个“AI 代码补全工具”&#xff0c;它更像是一个可被“配置”与“驱动”的智能开发引擎。如果你想让 Cursor 真正成为你团队的“项目开发助理”&#xff0c;你需要做两件事&#xff1a; 把项目的关键知识&#xff08;架构、设计…

【水果分类】基于计算机视觉和前馈神经网络自动水果分类系统附Matlab代码

✅作者简介&#xff1a;热爱数据处理、建模、算法设计的Matlab仿真开发者。&#x1f34e;更多Matlab代码及仿真咨询内容点击 &#x1f517;&#xff1a;Matlab科研工作室&#x1f34a;个人信条&#xff1a;格物致知。&#x1f525; 内容介绍一、技术背景与核心目标水果分类是农…

Python系列Bug修复|如何解决 pip install 安装报错 ModuleNotFoundError: No module named ‘aiohttp’ 问题

摘要 你在使用pip安装/运行aiohttp时遇到ModuleNotFoundError: No module named aiohttp报错&#xff0c;该问题核心诱因是环境一致性问题&#xff08;pip与python版本错位&#xff0c;占比40%&#xff09; 安装不完整 权限不足 虚拟环境未激活 Python版本不兼容 缓存损坏…

2026年1月电动搬运车厂家推荐排行榜,四轮电动搬运车,1~10吨电动搬运车,高效搬运解决方案优选指南 - 企业推荐官【官方】

2026年1月电动搬运车厂家推荐排行榜:四轮电动搬运车1~10吨高效搬运解决方案优选指南 在制造业、仓储物流、大型商超及各类工业场景中,物料的高效、安全搬运是保障生产运营流畅性的关键环节。电动搬运车,特别是四轮电…

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

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

跨国企业Cadence许可证全球统一管理方案

跨国企业Cadence许可证全球统一管理方案&#xff1a;破解全球合规与效率难题作为一名在电子设计自动化领域深耕多年的工程师&#xff0c;我常常遇到企业客户提到一个共同的问题&#xff1a;在跨国业务拓展中&#xff0c;如何统一管理Cadence软件的许可证&#xff1f;是在WeWork…

Petrel的license管理高频技术问题(FAQ)与官方解答

作为一名长期从事Petrel软件使用与维护的技术人员&#xff0c;我深知企业在使用Petrel进行地质建模、油藏模拟和数据管理时&#xff0c;经常会遇到关于license管理的相关问题。今天&#xff0c;我将以一个技术专家的视角&#xff0c;结合多年的实战经验和官方资料&#xff0c;总…

AI应用架构师解析AI系统灾备方案设计的优化策略

AI系统灾备方案设计优化策略:架构师视角的全链路韧性构建 元数据框架 标题:AI系统灾备方案设计优化策略:架构师视角的全链路韧性构建 关键词:AI灾备设计、系统韧性、数据一致性、模型版本管理、服务高可用、故障恢复策略、跨云部署 摘要: 随着AI系统从辅助工具向核心业务…

ToB获客新战场:AI推荐如何改写游戏规则

传统获客困局&#xff1a;决策链冗长、客单价高昂、精准触达难如登天。SEO流量萎缩、SEM成本飙升、展会转化低迷、销售外呼屡遭拒...当传统路径逐渐失效&#xff0c;ToB企业正站在获客转型的十字路口。2026破局点&#xff1a;AI推荐已成采购决策新变量真实场景正在发生&#xf…