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

算法通关村第十八关——排列问题

LeetCode46.给定一个没有重复数字的序列,返回其所有可能的全排列。例如:

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

元素1在[1,2]中已经使用过了,但是在[2,1]中还要再使用一次,所以就不能使用startlndex了,为此可以使用一个used数组来标记已经选择的元素

class Permute {List<List<Integer>> res = new ArrayList<>();LinkedList<Integer> path = new LinkedList<>();boolean[] used;public List<List<Integer>> permute(int[] nums) {if (nums.length == 0) {return res;}used = new boolean[nums.length];permuteHelper(nums);return res;}private void permuteHelper(int[] nums) {if (path.size() == nums.length) {res.add(new ArrayList<>(path));return;}for (int i = 0; i < nums.length; i++) {if (used[i]) {continue;}used[i] = true;path.add(nums[i]);permuteHelper(nums);path.removeLast();used[i] = false;}}
}

在这里for循环中,used[i]的变化可以这样理解,现在这一层刚上来当前元素肯定是没有使用过的,在执行了将used数组当前元素变为已使用,将当前元素添加到path中后,就要进入他的下一层了,在他的下面几层当前元素都是使用过的。

http://www.lryc.cn/news/162157.html

相关文章:

  • 基于STM32设计的生理监测装置
  • Go-Python-Java-C-LeetCode高分解法-第五周合集
  • 【前端知识】前端加密算法(base64、md5、sha1、escape/unescape、AES/DES)
  • leetcode 925. 长按键入
  • [CMake教程] 循环
  • Mojo安装使用初体验
  • 艺术与AI:科技与艺术的完美融合
  • Android常用的工具“小插件”——Widget机制
  • 探索在云原生环境中构建的大数据驱动的智能应用程序的成功案例,并分析它们的关键要素。
  • jupyter 添加中文选项
  • 系列十、Java操作RocketMQ之批量消息
  • leetcode1两数之和
  • 近年GDC服务器分享合集(四): 《火箭联盟》:为免费游玩而进行的扩展
  • android反射详解
  • Python 反射和动态执行
  • 计算机网络常见端口号
  • SpringBoot / Vue 对SSE的基本使用(简单上手)
  • Qt串口基本设置与协议收发
  • interview3-微服务与MQ
  • kafka详解一
  • Flutter yuv 转 rgb
  • MySQL——子查询
  • Java学习笔记---多态
  • 2023-09-10 LeetCode每日一题(课程表 II)
  • 合并区间【贪心算法】
  • 2023,软件测试人的未来在哪里?
  • Python中的Numpy向量计算(R与Python系列第三篇)
  • LeetCode刷题笔记【27】:贪心算法专题-5(无重叠区间、划分字母区间、合并区间)
  • nvidia-smi 命令详解
  • fork()函数的返回值