您的位置:首页 > 其它

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,
[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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: