47. 全排列 II
2021/12/20 23:22:26
本文主要是介绍47. 全排列 II,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
描述
给定一个可包含重复数字的序列 nums
,按任意顺序 返回所有不重复的全排列。
链接
47. 全排列 II - 力扣(LeetCode) (leetcode-cn.com)
解法
1 class Solution { 2 //存放结果 3 List<List<Integer>> result = new ArrayList<>(); 4 //暂存结果 5 List<Integer> path = new ArrayList<>(); 6 7 public List<List<Integer>> permuteUnique(int[] nums) { 8 boolean[] used = new boolean[nums.length]; 9 Arrays.fill(used, false); 10 Arrays.sort(nums); 11 backTrack(nums, used); 12 return result; 13 } 14 15 private void backTrack(int[] nums, boolean[] used) { 16 if (path.size() == nums.length) { 17 result.add(new ArrayList<>(path)); 18 return; 19 } 20 for (int i = 0; i < nums.length; i++) { 21 // used[i - 1] == true,说明同⼀树⽀nums[i - 1]使⽤过 22 // used[i - 1] == false,说明同⼀树层nums[i - 1]使⽤过 23 // 如果同⼀树层nums[i - 1]使⽤过则直接跳过 24 if (i > 0 && nums[i] == nums[i - 1] && used[i - 1] == false) { 25 continue; 26 } 27 //如果同⼀树⽀nums[i]没使⽤过开始处理 28 if (used[i] == false) { 29 used[i] = true;//标记同⼀树⽀nums[i]使⽤过,防止同一树支重复使用 30 path.add(nums[i]); 31 backTrack(nums, used); 32 path.remove(path.size() - 1);//回溯,说明同⼀树层nums[i]使⽤过,防止下一树层重复 33 used[i] = false;//回溯 34 } 35 } 36 } 37 }
参考
Carl
这篇关于47. 全排列 II的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南