Permutations II
Permutations II
Given a list of numbers with duplicate number in it. Find all unique permutations.
解决方案:可以利用一个访问数组,来控制元素是否访问过,同时需要在退出的条件中,判断是否有重复的值。
class Solution:
"""
@param nums: A list of integers.
@return: A list of unique permutations.
"""
def permuteUnique(self, nums):
# write your code here
isVisited = [False for i in range(len(nums))]
if nums == None:
return []
result = []
self.dfs(nums, result, [], isVisited)
return result
def dfs(self, nums, result, current, isVisited):
if len(nums) == len(current):
if current not in result:
result.append(list(current))
return
for i in range(len(nums)):
if isVisited[i] == False:
isVisited[i] = True
current.append(nums[i])
self.dfs(nums, result, current, isVisited)
isVisited[i] = False
del current[-1]
public class Solution {
public IList<IList<int>> result = new List<IList<int>>();
public IList<IList<int>> PermuteUnique(int[] nums) {
List<int> current = new List<int>();
bool[] isVisited = new bool[nums.Length];
Array.Sort(nums);
DFS(nums, result, current, isVisited);
return result;
}
public void DFS(int[] nums, IList<IList<int>> result, List<int> current, bool[] isVisited){
if(current.Count == nums.Length){
result.Add(new List<int>(current));
return;
}
for(int i= 0 ; i< nums.Length; i++){
if(isVisited[i] ||(i > 0 && nums[i] == nums[i - 1] && isVisited[i - 1])){
continue;
}
isVisited[i] = true;
current.Add(nums[i]);
DFS(nums, result, current, isVisited);
current.RemoveAt(current.Count - 1);
isVisited[i] = false;
}
}
}
Last updated
Was this helpful?