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

力扣HOT100之回溯:46. 全排列


之前刷代码随想录的时候做过这道题,现在忘得干干净净了,无语(ˉ▽ˉ;)…,看了下之前关于这道题的思路,写的还是比较简单,主要是基于卡尔的视频来写的,没看过视频的话看那篇博客有点费劲。这次就重新写一下。
这道题要求全排列,那么所有符合条件的排列各自存入一个一维数组,所有存储排列结果的一维数组存放到一个二维数组中,最终将二维数组返回。我们考虑定义一个全局变量path来收获不同的结果,直接额外定义一个回溯函数backtracking(),该函数接收两个参数,一个是包含所有元素的数组nums,另一个是已使用的元素数组used由于回溯函数肯定是递归函数,我们需要先明确递归的终止条件,当path.size() == nums.size()时说明所有元素全都用上了,此时我们将path添加到result中并直接退出函数,否则我们进入递归主体,在主体中,我们遍历nums中的所有元素,并检查当前遍历到的元素nums[i]是否已被使用,如果被使用,就直接跳过本轮循环,如果没使用过,就将nums[i]添加到path中,并且将used[i]设置为true。然后我们递归调用backtracking()获取下一层的排列,当递归调用结束后,需要及时回退,将nums[i]path中弹出,并及时将used[i]标记回false

class Solution {
public:vector<vector<int>> result;   //存放所有排列结果vector<int> path;   //用于记录各种不同的排列结果vector<vector<int>> permute(vector<int>& nums) {vector<bool> used(nums.size(), false);  //用于标记对应的元素是否已经被使用backtracking(nums, used);return result;}//回溯递归函数void backtracking(vector<int>& nums, vector<bool>& used){//递归终止条件if(path.size() == nums.size()){result.emplace_back(path);return ;}for(int i = 0; i < nums.size(); i++){if(used[i]) continue;   //遇到已经使用过的元素,直接跳过path.emplace_back(nums[i]);used[i] = true;backtracking(nums, used);used[i] = false;path.pop_back();}}
};

相关文章:

  • 大数据治理:理论、实践与未来展望(一)
  • ROS云课三分钟-破壁篇GCompris-一小部分支持Edu应用列表-2025
  • 第一课如何学习课程
  • Dify源码学习
  • csp备考Day1|string和vector
  • 几个MySQL系统调优工具
  • 03-工具篇-SSH远程登录ubuntu系统
  • Kubernetes in action-机理
  • 【Web前端】jQuery入门与基础(一)
  • ISO 26262-5 评估硬件随机失效率
  • Linux—进程池实现
  • C++题解(33)2025年顺德区中小学生程序设计展示活动(初中组C++)U560876 美丽数(一)和 U560878 美丽数(二)题解
  • Python之两个爬虫案例实战(澎湃新闻+网易每日简报):附源码+解释
  • 爬虫核心概念与工作原理详解
  • AI专题:如何把DeepSeek变成你的AI个人助手
  • 《2.2.1顺序表的定义|精讲篇》
  • 消息中间件之kafka
  • Linux-读者写著问题和读写锁
  • 香橙派3B学习笔记2:Vscode远程SSH登录香橙派_权限问题连接失败解决
  • 每日Prompt:梦回大唐
  • 昌乐网站建设/友情链接作用
  • 关于申请网站建设/自动seo网站源码
  • 金融网站建设方案ppt模板/seo推广主要做什么
  • 如何查询网站接入商/企业网络推广网站
  • 网站服务费网络建设会计分录/网站推广多少钱
  • 天柱县住房和城乡建设部网站/环球军事新闻最新消息