LeetCode 47. Permutations II
2017-11-10 16:14
691 查看
Given a collection of numbers that might contain duplicates, return all possible unique permutations.
For example,
java
class Solution {
public List<List<Integer>> permuteUnique(int[] nums) {
List<List<Integer>> result = new ArrayList<>();
if (nums == null) {
return result;
}
if (nums.length == 0) {
result.add(new ArrayList<Integer>());
return result;
}
boolean[] visit = new boolean[nums.length];
Arrays.sort(nums);
dfs(nums, visit, new ArrayList<Integer>(), result);
return result;
}
private void dfs(int[] nums,
boolean[] visit,
List<Integer> path,
List<List<Integer>> result) {
if (path.size() == nums.length) {
result.add(new ArrayList<Integer>(path));
return;
}
for (int i = 0; i < nums.length; i++) {
if (visit[i] == true) {
continue;
}
if (i != 0 && nums[i] == nums[i - 1] && visit[i - 1] == false) {
continue;
}
visit[i] = true;
path.add(nums[i]);
dfs(nums, visit, path, result);
path.remove(path.size() - 1);
visit[i] = false;
}
}
}
python
class Solution(object):
def permuteUnique(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
if nums is None:
return []
if len(nums) == 0:
return [[]]
visit, result = [False] * len(nums), []
nums.sort()
self.dfs(nums, visit, [], result)
return result
def dfs(self, nums, visit, path, result):
if (len(path) == len(nums)):
result.append(path[:])
return
for i in range(len(nums)):
if visit[i] == True:
continue
if i != 0 and nums[i] == nums[i - 1] and visit[i - 1] == False:
continue
visit[i] = True
path.append(nums[i])
self.dfs(nums, visit, path, result)
path.pop()
visit[i] = False
For example,
[1,1,2]have the following unique permutations:
[ [1,1,2], [1,2,1], [2,1,1] ]
java
class Solution {
public List<List<Integer>> permuteUnique(int[] nums) {
List<List<Integer>> result = new ArrayList<>();
if (nums == null) {
return result;
}
if (nums.length == 0) {
result.add(new ArrayList<Integer>());
return result;
}
boolean[] visit = new boolean[nums.length];
Arrays.sort(nums);
dfs(nums, visit, new ArrayList<Integer>(), result);
return result;
}
private void dfs(int[] nums,
boolean[] visit,
List<Integer> path,
List<List<Integer>> result) {
if (path.size() == nums.length) {
result.add(new ArrayList<Integer>(path));
return;
}
for (int i = 0; i < nums.length; i++) {
if (visit[i] == true) {
continue;
}
if (i != 0 && nums[i] == nums[i - 1] && visit[i - 1] == false) {
continue;
}
visit[i] = true;
path.add(nums[i]);
dfs(nums, visit, path, result);
path.remove(path.size() - 1);
visit[i] = false;
}
}
}
python
class Solution(object):
def permuteUnique(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
if nums is None:
return []
if len(nums) == 0:
return [[]]
visit, result = [False] * len(nums), []
nums.sort()
self.dfs(nums, visit, [], result)
return result
def dfs(self, nums, visit, path, result):
if (len(path) == len(nums)):
result.append(path[:])
return
for i in range(len(nums)):
if visit[i] == True:
continue
if i != 0 and nums[i] == nums[i - 1] and visit[i - 1] == False:
continue
visit[i] = True
path.append(nums[i])
self.dfs(nums, visit, path, result)
path.pop()
visit[i] = False
相关文章推荐
- [leetcode] 47. Permutations II
- <LeetCode OJ> 47. Permutations II
- leetcode编程记录19 #47 Permutations II
- Leetcode 47 Permutations II
- LeetCode-47-Permutations II 递归+dict
- LeetCode47 Permutations II
- leetcode 47. Permutations II
- LeetCode-47.Permutations II
- Leetcode 47. Permutations II (Medium) (cpp)
- LeetCode 47. Permutations II
- 【LeetCode】47. Permutations II
- [leetcode-47]Permutations II(java)
- leetCode 47.Permutations II (排列组合II) 解题思路和方法
- Leetcode 47 Permutations II
- Leetcode 47 Permutations II
- leetcode 47: Permutations II
- LeetCode 46 Permutations + LeetCode 47 Permutations II
- LeetCode 47 Permutations II
- [LeetCode]--47. Permutations II
- leetcode || 47、 Permutations II