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

力扣面试150题--全排列

Day 71

题目描述

在这里插入图片描述

思路

回溯这类题还真不好理解 难点在于它的思路是什么,写代码很简单
举个例子 123,我们如何获取它的全排列。如下图
在这里插入图片描述
我们聚焦到数组的序号first,我们需要不重复的往这个first填数(并且不重复,考虑从左往右依次填入值),抽象到图里的意思是该空格的元素,依次和空格后的元素交换次序(还有一个不交换的情况)。每次进入下一层时,first+1,然后重复交换的做法,直到first==元素总数(即都指向最后一个元素)。
思路已经有了
我们来看看回溯的做题模板:


void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择 : 本层集合中的元素) {处理节点;backtracking(路径, 选择列表); // 递归撤销处理; // 回溯}
}

我们来依次填空,首先我们需要一个保存结果的数组res,以及一个存放每种清空的列表te,这些都定义在permute,
首先我们需要确定back函数的参数,res和te肯定需要,我们需要得到空格的位置吧 x,我们需要知道数组的长度吧 n。对于te我们需要提前往里面填入nums的值,因为我们需要不停交换嘛。
其次我们来看终止条件,根据我们上面的分析,只要first==列表元素总数就要要保存te的副本到res中,结束递归。
最后看,循环条件,我们需要从空格位置和其后每个元素交换位置,操作就很明显了就是交换,撤销就是换回来就行,back()移动空格处理。

class Solution {public  static  void back(int x,int n,List<List<Integer>>res,List<Integer>te){if(x==n){res.add(new ArrayList<Integer>(te));return;}for(int i=x;i<n;i++){Collections.swap(te,i,x);back(x+1,n,res,te);Collections.swap(te,x,i);}}public  static  List<List<Integer>> permute(int[] nums) {List<List<Integer>>res = new ArrayList<List<Integer>>();List<Integer>te = new ArrayList<Integer>();for (int i = 0; i < nums.length; i++) {te.add(nums[i]);}back(0,nums.length,res,te);return  res;}
}
http://www.lryc.cn/news/583799.html

相关文章:

  • leetcode 3440. 重新安排会议得到最多空余时间 II 中等
  • Leetcode力扣解题记录--第42题 接雨水(动规和分治法)
  • 图解LeetCode:79递归实现单词搜索
  • 【LeetCode100】--- 1.两数之和【复习回滚】
  • 力扣-73.矩阵置零
  • 力扣-54.螺旋矩阵
  • 每天一个前端小知识 Day 29 - WebGL / WebGPU 数据可视化引擎设计与实践
  • C++11 std::is_sorted 和 std::is_sorted_until 原理解析
  • 邀请函 | 知从科技邀您共赴2025 RISC-V 中国峰会
  • 使用 Qlib 获取股票数据
  • 从零开始的语言模型构建 CS336 第一课(一)
  • 数字孪生系统如何助力汽车零部件企业实现虚拟智控
  • Allegro PCB 手动添加元器件全流程解析
  • Pytest 预期失败测试:如何标记“已知问题”用例
  • HTTP 请求体类型详解:选择最适合的数据提交格式
  • 西部数据WD授权代理商-深圳同袍存储科技有限公司
  • QT6 源(160)模型视图架构里的树表视图 QTreeView 篇一:本类的属性, public 与 protected 成员函数 ,
  • 字节跳动高质量声音克龙文字转语音合成软件MegaTTS3整合包
  • 华为昇腾NPU与NVIDIA CUDA生态兼容层开发实录:手写算子自动转换工具链(AST级代码迁移方案)
  • 「py数据分析」04如何将 Python 爬取的数据保存为 CSV 文件
  • 2025.07.09华为机考真题解析-第二题200分
  • [C#] 使用TextBox换行失败的原因与解决方案:换用RichTextBox的实战经验
  • Web 会话认证方案详解:原理、流程与安全实践
  • vue2项目部署流程
  • 腾讯云分为几个区域
  • 在vscode中安装jupyter
  • 【基础架构】——软件系统复杂度的来源(低成本、安全、规模)
  • IoT 小程序:如何破解设备互联的碎片化困局?
  • 计算机网络实验——无线局域网安全实验
  • 区块链基础知识:从比特币到区块链的全面解析