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-12-24怎么修改Kafka的JVM参数?-icode9专业技术文章分享
- 2024-12-23线下车企门店如何实现线上线下融合?
- 2024-12-23鸿蒙Next ArkTS编程规范总结
- 2024-12-23物流团队冬至高效运转,哪款办公软件可助力风险评估?
- 2024-12-23优化库存,提升效率:医药企业如何借助看板软件实现仓库智能化
- 2024-12-23项目管理零负担!轻量化看板工具如何助力团队协作
- 2024-12-23电商活动复盘,为何是团队成长的核心环节?
- 2024-12-23鸿蒙Next ArkTS高性能编程实战
- 2024-12-23数据驱动:电商复盘从基础到进阶!
- 2024-12-23从数据到客户:跨境电商如何通过销售跟踪工具提升营销精准度?