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

Day71 代码随想录打卡|回溯算法篇---全排列

题目(leecode T46):

给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。

方法:全排列是数学中的基础问题,也是回溯算法能解决的经典问题。全排列因为每个元素都会用到,所以不需要startIndex来控制递归的位置,但由于每个元素只能使用一次而不重复,所以需要使用used数组来表示当前元素是否被使用过了,使用过的话就跳过当前递归。分析三部曲:

1:传入参数与返回值:传入nums数组与使用数组used

2:终止条件:全排列要求每个元素都用到了,因此当path中收集的元素长度达到了nums.size时就可以收集结果并返回了

3:单层处理逻辑:单层中只需要判断一下当前的nums[i]是否是被使用过的,如果是的话就直接退出当前递归,否则的话就递归。同时记得在处理nums[i]元素时更新used数组的使用情况。

题解:

class Solution {
private:vector<int> path;vector<vector<int>> result;void backtracking(vector<int>& nums, vector<bool>& used){if(path.size() == nums.size()){                 //终止条件result.push_back(path);return;}for(int i = 0; i < nums.size(); i++){        //因为每个元素都要用到,无需startIndexif(used[i] == true) continue;path.push_back(nums[i]);used[i] = true;                          //注意及时更新used数组 backtracking(nums, used);path.pop_back();used[i] = false;}}
public:vector<vector<int>> permute(vector<int>& nums) {path.clear();result.clear();vector<bool> used(nums.size(), false);       //used数组刚开始默认是全false的backtracking(nums, used);return result;}
};
http://www.lryc.cn/news/401590.html

相关文章:

  • 开源科学工程技术软件
  • 甄选范文“论软件维护方法及其应用”软考高级论文,系统架构设计师论文
  • 【服务器】端口映射
  • HTC 10 刷系统 LineageOS 19.1 Android 12
  • 访问者模式(Visitor Pattern)
  • mac如何查看cpu和显卡温度
  • MongoDB教程(六):mongoDB复制副本集
  • 牛客小白月赛98 (个人题解)(补全)
  • Ubuntu压缩解压各类型文件
  • 昇思学习打卡-20-生成式/GAN图像生成
  • javafx、node js、socket、OpenGL多线程
  • 【学习笔记】无人机(UAV)在3GPP系统中的增强支持(七)-通过无人机实现无线接入的独立部署
  • 模糊综合评价
  • 系统测试-白盒测试学习
  • UI设计工具选择指南:Sketch、XD、Figma、即时设计
  • Pycharm 导入 conda 环境
  • Vue封装Tooltip(提示工具)
  • Go 1.19.4 函数-Day 08
  • Docker-Nvidia(NVIDIA Container Toolkit)
  • Mongodb 3.6 数据恢复操作
  • C++ | Leetcode C++题解之第238题除自身以外数组的乘积
  • 挂耳式蓝牙耳机什么牌子好?这五款综合表现遥遥领先
  • 防火墙-NAT策略和智能选路
  • 一键优雅为Ubuntu20.04服务器挂载新磁盘
  • 踩坑日记 | 记一次流程图问题排查
  • 数据建设实践之大数据平台(四)安装mysql
  • MongoDB常用命令大全,概述、备份恢复
  • uni-app 保存号码到通讯录
  • Jetson-AGX-Orin gstreamer+rtmp+http-flv 推拉流
  • ES证书过期替换方案