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

LeetCode46.全排列

在这里插入图片描述

LeetCode刷题记录

文章目录

    • 📜题目描述
    • 💡解题思路
    • C++代码


📜题目描述

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

示例1

输入:nums = [1,2,3]
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

示例2

输入:nums = [0,1]
输出:[[0,1],[1,0]]

示例3:

输入:nums = [1]
输出:[[1]]

提示:

  • 1 <= nums.length <= 6
  • -10 <= nums[i] <= 10
  • nums 中的所有整数 互不相同

💡解题思路

思路:经典回溯

image-20221114180103280

每个节点:

  • 前序位置:
    1. 当前元素放入临时vector tmp
    2. 标记当前元素已经使用过了used[i] = true
    3. 判断tmp的长度是否和nums的长度相同,若相同则为全排列,尾插到结果数组
  • 中序位置:递归 – 遍历nums,递归没有使用过的元素
  • 后序位置:撤销操作(回溯)
    1. used[i] = false (当前值标记为未使用)
    2. tmp.pop_back() (临时数组删除当前元素)

主函数中需要遍历每一个元素为起始

for(i : nums)

C++代码

class Solution {  
public:  void backtrack(vector<vector<int>>& vv, vector<bool>& used, const vector<int>& nums, vector<int>& tmp) {  //结束条件  if (tmp.size() == nums.size()) { //走到最底了  vv.push_back(tmp);  return;  }  for (int i = 0; i < nums.size(); ++i) {  if (used[i]) {  //如果被使用,continue  continue;  }  //如果当前元素没有被使用  //操作  used[i] = true;  tmp.push_back(nums[i]);  //递归问题 -> 临时变量的是 tmp 和 used数组  backtrack(vv, used, nums, tmp);  //撤销操作  used[i] = false;  tmp.pop_back();  }  }  vector<vector<int>> permute(vector<int>& nums) {  int len = nums.size();  //设立一个标记数组。  vector<bool> used(len, false);  //保存最终结果  - 长度未知  //临时容器  vector<int> tmp;  vector<vector<int>> vv;  backtrack(vv, used, nums, tmp);  return vv;  }  
};
http://www.lryc.cn/news/489536.html

相关文章:

  • 蓝桥杯-洛谷刷题-day4(C++)
  • c++总复习
  • 设计模式之策略模式-工作实战总结与实现
  • E - 11/22 Subsequence题解
  • PyPI 攻击:ChatGPT、Claude 模仿者通过 Python 库传播 JarkaStealer
  • 单片机学习笔记 9. 8×8LED点阵屏
  • 【大模型-智能体】AutoGen Studio测试和导出工作流程
  • 【Linux】-学习笔记04
  • 计算机网络:应用层知识点概述及习题
  • 如何构建高效的接口自动化测试框架?
  • 【C++习题】10.反转字符串中的单词 lll
  • undefined symbol: __nvJitLinkComplete_12_4, version libnvJitLink.so.12 问题解决
  • C语言——数组逐元素操作练习
  • HTML的自动定义倒计时,这个配色存一下
  • CUDA补充笔记
  • C++二级:满足条件的数的累加
  • 【山大909算法题】2014-T1
  • 【MySQL实战45讲笔记】基础篇——深入浅出索引(上)
  • 通关C语言自定义类型:联合和枚举
  • python高阶技巧一
  • Java 对象头、Mark Word、monitor与synchronized关联关系以及synchronized锁优化
  • 鸿蒙网络编程系列50-仓颉版TCP回声服务器示例
  • 软件测试基础(自动化测试、性能测试)
  • C++中的原子操作:原子性、内存顺序、性能优化与原子变量赋值
  • 游戏引擎学习第19天
  • RocketMQ: 专业术语以及相关问题解决
  • C++ 类和对象中的 拷贝构造 和 运算符重载
  • el-table最大高度无法滚动
  • Vscode写markdown快速插入python代码
  • 基于 NCD 与优化函数结合的非线性优化 PID 控制