news 2026/5/1 6:59:27

回溯算法--子集

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
回溯算法--子集
输入: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; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 6:59:26

Langchain-Chatchat 0.3.1 Windows部署指南

Langchain-Chatchat 0.3.1 Windows 部署实战指南 在企业知识管理日益智能化的今天&#xff0c;如何让内部文档“活起来”&#xff0c;成为员工随问随答的智能助手&#xff1f;一个安全、可控、本地化运行的知识库问答系统显得尤为关键。而 Langchain-Chatchat 正是这一需求下的…

作者头像 李华
网站建设 2026/5/1 6:58:07

AutoGPT应用指南:大语言模型自动化实践

AutoGPT应用指南&#xff1a;大语言模型自动化实践 在一次深夜的编程调试中&#xff0c;开发者小李突然意识到——他已经在重复执行“查文档、写代码、测试、报错、再查文档”的循环超过十次。如果有个助手能主动帮他规划学习路径、搜索资料、甚至编写可运行的代码片段&#x…

作者头像 李华
网站建设 2026/4/19 2:07:13

从特斯拉摔倒看六维力传感器:人形机器人自主性的“关键拼图”

最近&#xff0c;一段特斯拉Optimus&#xff08;擎天柱&#xff09;机器人在演示中摔倒的视频&#xff0c;意外地成为了机器人行业一个标志性的事件。在这起事件中&#xff0c;人们关注的焦点并非机器人摔倒本身&#xff0c;而是它倒地前双手做出的一个诡异“抓握”动作——这个…

作者头像 李华
网站建设 2026/4/23 13:25:48

Kotaemon为何成为GitHub热门开源对话框架?

Kotaemon为何成为GitHub热门开源对话框架&#xff1f; 在AI技术加速渗透企业生产系统的今天&#xff0c;一个看似低调的开源项目——Kotaemon&#xff0c;正悄然在开发者社区中引发关注。它没有华丽的Demo视频&#xff0c;也不依赖大模型厂商背书&#xff0c;却凭借扎实的工程设…

作者头像 李华
网站建设 2026/4/26 18:13:42

Linux下TensorFlow-GPU环境配置指南

Linux下TensorFlow-GPU环境配置指南 在深度学习项目中&#xff0c;能否高效利用GPU资源往往直接决定了模型训练的速度与可行性。然而&#xff0c;许多开发者都曾经历过这样的场景&#xff1a;满怀期待地跑起代码&#xff0c;却发现tf.config.list_physical_devices(GPU)返回空…

作者头像 李华
网站建设 2026/4/23 9:30:35

Qwen3-8B-AWQ性能优化与多语言应用实践

Qwen3-8B-AWQ性能优化与多语言应用实践 在当前大模型部署成本高企的背景下&#xff0c;如何在有限硬件资源下实现高质量推理&#xff0c;成为开发者关注的核心问题。尤其是在消费级GPU环境中&#xff0c;既要保证生成质量&#xff0c;又要控制显存占用和响应延迟&#xff0c;这…

作者头像 李华