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

回溯算法--子集

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

注意点:

  1. 组合问题和分割问题都是收集树的叶子节点,而子集问题是找树的所有节点!
  2. 那么既然是无序,取过的元素不会重复取,写回溯算法的时候,for就要从startIndex开始,而不是从0开始!

代码

根据回溯三部曲

参数、终止条件、单层递归逻辑,写出代码

代码

#include<iostream> #include<vector> using namespace std; class Solution { private: vector<vector<int>> result; // 存储所有子集的结果集 vector<int> path; // 存储当前正在构建的子集(路径) // 回溯函数:生成所有子集 // nums: 输入的数字数组 // startIndex: 当前递归开始选择的起始索引(避免重复选择) void backtracking(const vector<int>& nums, int startIndex){ // 终止条件1:当当前路径长度等于原数组长度时 // 说明已构建了一个包含所有元素的子集(即原数组本身) if(path.size() == nums.size()){ result.push_back(path); // 将完整子集加入结果 return; // 结束当前递归分支 } // 关键点:每次进入递归都先将当前path加入结果 // 这样能收集所有中间状态的子集,包括空集、部分子集 result.push_back(path); // 遍历所有可能的选择:从startIndex开始到数组末尾 for(int i = startIndex; i < nums.size(); i ++){ path.push_back(nums[i]); // 做选择:将当前数字加入路径 backtracking(nums, i + 1); // 递归:以i+1为起始点继续构建子集 path.pop_back(); // 撤销选择:回溯,移除最后加入的数字 } } public: vector<vector<int>> subsets(vector<int>& nums) { result.clear(); // 清空结果集,避免之前的数据干扰 path.clear(); // 清空当前路径 backtracking(nums, 0); // 从索引0开始回溯 return result; // 返回所有子集 } }; int main(){ Solution S; vector<int> nums = {1, 2, 3, 4}; vector<vector<int>> res = S.subsets(nums); for(auto row : res){ // 遍历每个组合 for(auto cols : row) // 遍历组合中的每个数字 cout << cols << " " ; // 输出数字 cout << endl; // 每个组合后换行 } return 0; }
http://www.cnnetsun.cn/news/86244.html

相关文章:

  • ComfyUI API使用指南:高效稳定的绘图接口
  • Dify平台如何整合外部API扩展AI能力?
  • FLUX.1-ControlNet统一模型Pro 2.0发布
  • Dify v0.6.9 源码部署与架构解析
  • Excalidraw:手绘风在线白板,高效又有趣
  • 工业通信网络深度解析:从设备集成到系统架构
  • 领英黑五B端客户营销指南
  • Git下载GitHub项目卡住?使用清华镜像代理地址快速获取
  • ComfyUI缺少Manager?手动安装教程
  • FaceFusion局域网访问与端口设置方法
  • LobeChat插件系统详解:如何为你的AI助手添加自定义能力
  • LobeChat能否标记不确定性?避免过度自信输出
  • Docker中TensorFlow-GPU部署与CUDA问题解决
  • 大模型学习路线(2026最新)从零基础入门到精通,看完这一篇就够了
  • NPM安装Socket.IO实现实时推送TensorRT状态
  • 手把手教你从0搭建一个智能体,全部跟下来你就Agent入门了!(超详细的讲解)
  • Linly-Talker:支持图片上传的AI数字人对话系统
  • Qwen3-VL-8B实现近实时视频流分析的实践探索
  • Qwen-Image-Edit-2509能否在手机上运行?
  • XTS 认证
  • 22、Perl正则表达式与程序交互全解析
  • GPU加速YOLO推理:TensorRT集成教程
  • 23、深入理解Perl中的函数和子程序
  • 28、Perl高级编程:引用、多维数组与哈希引用
  • 【JavaSE】十七、UDP套接字编程 TCP套接字编程
  • 10个降AI率工具推荐,本科生高效避坑指南
  • 海洋微生物显微图像分类与检测:Yolo13-Seg-Faster模型实现14种物种自动识别
  • 为什么哈希函数能快速定位元素位置?从案例、原理到应用
  • 购票管理系统
  • 防火墙实验 防火墙综合实验