博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode 47. Permutations II
阅读量:4967 次
发布时间:2019-06-12

本文共 1518 字,大约阅读时间需要 5 分钟。

47. Permutations II

  

  • Total Accepted: 106328
  • Total Submissions: 338713
  • Difficulty: Medium
  • Contributors: Admin 

Given a collection of numbers that might contain duplicates, return all possible unique permutations.

For example,

[1,1,2] have the following unique permutations:

[  [1,1,2],  [1,2,1],  [2,1,1]]

 to see which companies asked this question.

【题目分析】

相比较上一个题目,这个题目中元素是可能重复的。如果还按照之前的算法,会导致很多结果是重复的。

【思路】

1. 将元素排序,这样所有重复的元素就变为相邻元素,有利于我们的处理。

2. 判断如果当前元素和它前一个元素相同,那么只有在前一个元素已经被使用情况下当前元素才能被使用,这就能避免出现重复的结果。因为无论哪种结果,重复元素在结果中的相对顺序是固定的,彼此之间没有交换位置,而这种顺序只可能有一种。

【java代码】

1 public class Solution { 2     public List
> permuteUnique(int[] nums) { 3 Arrays.sort(nums); 4 int[] used = new int[nums.length]; 5 List
> list = new ArrayList<>(); 6 backtrack(list, new ArrayList<>(), nums, used); 7 return list; 8 } 9 10 private void backtrack(List
> list, List
tempList, int [] nums, int[] used){11 if(tempList.size() == nums.length){12 list.add(new ArrayList<>(tempList));13 return;14 } 15 for(int i = 0; i < nums.length; i++){ 16 if(used[i] == 1) continue;17 if(i > 0 && nums[i-1]==nums[i] && used[i-1]==0) continue;18 used[i] = 1;19 tempList.add(nums[i]);20 backtrack(list, tempList, nums, used);21 tempList.remove(tempList.size() - 1);22 used[i] = 0;23 }24 }25 }

 

转载于:https://www.cnblogs.com/liujinhong/p/6474099.html

你可能感兴趣的文章
Linux-Rsync服务器/客户端搭建实战
查看>>
接口和抽象类有什么区别
查看>>
简单通过百度api自动获取定位-前端实现
查看>>
180117 我的宠物识别判断语句
查看>>
JavaScript修炼之道pdf
查看>>
自己动手构造编译系统++编译、汇编与链接pdf
查看>>
JAVA 中文件读写函数BufferedReader 和 BufferedWriter 的使用
查看>>
Codeforces Round #206 (Div. 2)
查看>>
提升混合应用页面打开速度的新思路
查看>>
Mycat分表分库
查看>>
2019.7.11
查看>>
Php取扩展名
查看>>
模板的文件名和方法名一定要一致!!
查看>>
**p
查看>>
优先队列详解
查看>>
VS2012 创建项目失败,,提示为找到约束。。。。
查看>>
通过给定的文件流,判断文件的编码类型
查看>>
zookeeper(3) 持久化
查看>>
Windows Socket I/O模型 以及 Linux Epoll模型 的有关资料(转)
查看>>
用guava快速打造两级缓存能力
查看>>