news 2026/8/23 23:11:59

回溯算法--子集

作者头像

张小明

前端开发工程师

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/8/24 14:07:34

LobeChat能否支持方言识别?地域文化包容性

LobeChat能否支持方言识别&#xff1f;地域文化包容性 在智能语音助手日益普及的今天&#xff0c;一个现实问题逐渐浮现&#xff1a;当一位四川老人对着手机说“你晓得昨个儿哪个来咯不&#xff1f;”&#xff0c;AI听懂了吗&#xff1f;更进一步&#xff0c;它能以自然的方式回…

作者头像 李华
网站建设 2026/8/23 15:32:56

Excalidraw模板系统:预设与自定义实践

Excalidraw模板系统&#xff1a;预设与自定义实践 在快节奏的产品设计与技术协作中&#xff0c;如何让想法“秒级落地”&#xff1f;很多团队发现&#xff0c;即便工具再强大&#xff0c;如果每次画图都从零开始——重画按钮、反复调整流程节点、解释图例含义——那再敏捷的流…

作者头像 李华
网站建设 2026/8/24 1:38:00

LobeChat背后的技术栈揭秘:Next.js + React的优势体现

LobeChat背后的技术栈揭秘&#xff1a;Next.js React的优势体现 在大语言模型&#xff08;LLM&#xff09;席卷全球的浪潮中&#xff0c;AI聊天应用早已从实验室走向千家万户。自ChatGPT引爆市场以来&#xff0c;用户对对话系统的期待不再局限于“能回答问题”&#xff0c;而是…

作者头像 李华
网站建设 2026/8/24 14:11:12

Qwen3-VL-30B 4bit量化版发布:单卡部署,精度保留95%

Qwen3-VL-30B 4bit量化版发布&#xff1a;单卡部署&#xff0c;精度保留95% 在智能系统开始“阅读”世界的时代&#xff0c;我们早已不再满足于AI能否识别图像中的猫狗。真正关键的问题是——它能不能看懂财报里的折线图趋势&#xff1f;能不能结合医学影像和病史判断病变风险&…

作者头像 李华
网站建设 2026/8/24 14:51:01

Stable-Diffusion-3.5-FP8环境配置全指南

Stable-Diffusion-3.5-FP8环境配置全指南 你已经听说过 Stable-Diffusion-3.5-FP8 ——那个被开发者圈称为“消费级GPU也能跑10241024”的高性能量化模型。它以接近FP16的视觉质量&#xff0c;仅需约7GB显存即可完成推理&#xff0c;推理速度相比原版提升近50%。但当你真正准备…

作者头像 李华