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

回溯-全排列

1)数字不能重复使用(同一树枝不能重复)

使用used辅助数组,使用就改为true

2)排列不可重复(同一树层不可重复)

if (i >0 &&nums[i] == nums[i-1] && used[i-1] == false){//used[i-1] == false  说明同一数层使用过//used[i] == true  说明同一树枝使用过continue;}

i>0是防止数组索引i-1越界

3)整体代码

public static void main(String[] args) {int nums[] = {1,1,2};System.out.println(new T01().permuteUnique(nums));}//给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。public List<List<Integer>> permuteUnique(int[] nums) {List<List<Integer>> res = new ArrayList<>();List<Integer> path = new LinkedList<>();boolean[] used = new boolean[nums.length];dfs(nums, res, path, used);return res;}private void dfs(int[] nums, List<List<Integer>> res, List<Integer> path, boolean[] used) {if (path.size() == nums.length){res.add(new ArrayList<>(path));return;}for (int i = 0; i < nums.length; i++) {if (i >0 &&nums[i] == nums[i-1] && used[i-1] == false){//used[i-1] == false  说明同一数层使用过//used[i] == true  说明同一树枝使用过continue;}if (used[i] == false){path.add(nums[i]);used[i] = true;//标记为使用过dfs(nums, res, path, used);path.remove(path.size()-1);used[i] = false;}}}


http://www.mrgr.cn/news/27306.html

相关文章:

  • 关于java同步调用多个接口并返回数据
  • 数据结构之快速排序、堆排序概念与实现举例
  • 如何注册Liberty大学并获取Perplexity Pro
  • linux 操作系统下cupsenable命令介绍和使用案例
  • 【Ubuntu】Ubuntu双网卡配置 实现内外网互不影响同时可用
  • 【Qt绘图】—— 运用Qt进行绘图
  • C++数据结构-树的概念及分类介绍(基础篇)
  • Numpy 数组拼接与拆分函数详解
  • 检查一个复数C的实部a和虚部b是否都是有限数值即a和b都不是无限数值、空值cmath.isfinite(x)
  • 51单片机-DS18B20(温度传感器)AT24C02(存储芯片) IIC通信-实验2-温度实时监测(可设置阈值)
  • GitLab CI_CD 从入门到实战笔记
  • 面试爱考 | 设计模式
  • 【编程基础知识】Java语言中字面字符和转义字符的区别
  • 图神经运算符 (GNO)能不能用于炒股?
  • 【spring】spring框架中使用的设计模式有哪些,经典的设计模式应用,spring框架中哪些地方使用了哪些优秀的设计模式
  • 【IP协议】解决 IP 地址不够用的问题(IP地址管理:动态分配、NAT、Ipv6)
  • 如何看待IBM中国研发部裁员?
  • 门店引流神器异形创意LED圆形(饼/盘)显示屏使商业广告更有吸引力
  • 【Python电商项目汇报总结】**采集10万+淘宝商品详情数据注意事项总结汇报**
  • Unity的Button组件进行扩展