当前位置: 首页 > 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();}}
};
http://www.xdnf.cn/news/625465.html

相关文章:

  • juc面试题
  • LumaDot (亮度可调的屏幕圆点)
  • 分布式消息中间件基础
  • 网络协议与通信安全
  • Oracle 19c DG备库报错ORA-00313、ORA-00312、ORA-27037
  • 【Linux仓库】权限的量子纠缠:用户/组/other如何编织Linux访问控制网?
  • el-form 使用el-row el-col对齐 注意事项
  • 从碎片化到集成化:Profibus转Profinet网关引领设备管理数字化转型
  • 【TypeScript】知识点梳理(四)
  • 5月24日day35打卡
  • qiankun解决的问题
  • ABC406E 题解
  • python中Web框架Flask vs FastAPI 对比分析
  • 一个开源的 Blazor 跨平台入门级实战项目
  • 红黑树简单模拟实现
  • 随机森林(Random Forest)学习
  • ES的Refresh、Flush、Merge操作对性能的影响? ES如何实现近实时(NRT)搜索? ES聚合查询的Terms和Cardinality区别?
  • R基于多元线性回归模型实现汽车燃油效率预测及SHAP值解释项目实战
  • TDengine 高可用——双活方案
  • 爬虫实战之爬微博图片:xpath的具体运用
  • maven 3.0多线程编译提高编译速度
  • C++类型转换
  • Flink运行架构及并行度设置
  • 9.4在 VS Code 中配置 Maven
  • [C++]洛谷B3626 跳跃机器人(题干 + 详细讲解, BFS练习题)
  • 安卓11 不带谷歌包默认桌面布局
  • android studio 开启无线调试
  • JVM 的垃圾回收机制 GC
  • QT写槽函数的注意事项
  • 第1周 神经网络基石: 从零构建你的第一个模型