news 2026/10/20 10:45:58

回溯算法--子集

作者头像

张小明

前端开发工程师

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/10/20 11:48:07

ComfyUI API使用指南:高效稳定的绘图接口

ComfyUI API 使用指南&#xff1a;构建高效稳定的 AI 绘图系统 在当今 AI 图像生成的应用场景中&#xff0c;越来越多的开发者不再满足于“点几下按钮出图”的简单操作。当需要将文生图能力集成到企业级产品、自动化平台或高并发服务时&#xff0c;传统 WebUI 的局限性立刻暴露…

作者头像 李华
网站建设 2026/10/20 9:19:01

Dify平台如何整合外部API扩展AI能力?

Dify平台如何整合外部API扩展AI能力&#xff1f; 在企业纷纷拥抱大模型的今天&#xff0c;一个现实问题摆在面前&#xff1a;如何让AI不只是“能说会道”&#xff0c;还能真正“动手办事”&#xff1f;很多团队尝试基于LLM搭建智能客服或知识助手&#xff0c;但很快发现&#x…

作者头像 李华
网站建设 2026/10/19 23:49:46

FLUX.1-ControlNet统一模型Pro 2.0发布

FLUX.1-ControlNet统一模型Pro 2.0发布 在生成式AI快速演进的今天&#xff0c;图像生成不再只是“输入文字、输出画面”的简单过程。越来越多的应用场景要求模型具备精确的空间控制能力——比如让角色摆出特定姿势、复现建筑草图的轮廓结构&#xff0c;或根据深度信息构建逼真…

作者头像 李华
网站建设 2026/10/20 22:06:58

Dify v0.6.9 源码部署与架构解析

Dify v0.6.9 源码部署与架构解析 在 AI 应用开发日益低代码化、可视化的今天&#xff0c;Dify 作为一款开源的 LLM 工具平台&#xff0c;正逐渐成为企业构建智能客服、知识助手和自动化内容生成系统的首选。它将 Prompt 编排、RAG&#xff08;检索增强生成&#xff09;、AI Ag…

作者头像 李华
网站建设 2026/10/20 14:11:33

Excalidraw:手绘风在线白板,高效又有趣

Excalidraw&#xff1a;让思维在手绘白板上自由生长 想象这样一个场景&#xff1a;你正和团队远程开会&#xff0c;讨论一个复杂的系统架构。有人提出想法&#xff0c;你立刻在屏幕上画出一个带箭头的流程图&#xff1b;另一位同事实时调整模块布局&#xff0c;第三个人在一旁…

作者头像 李华
网站建设 2026/10/19 9:07:27

工业通信网络深度解析:从设备集成到系统架构

工业通信网络深度解析&#xff1a;从设备集成到系统架构 引言&#xff1a;全设备互联的工业通信愿景 在现代工业环境中&#xff0c;单一的设备通信已不能满足生产需求。无论是制药企业的洁净车间、汽车制造的生产线&#xff0c;还是化工厂的DCS系统&#xff0c;都需要将数以百计…

作者头像 李华