题目
思路
DFS,因为要去重,所以需要判断一下每一个数字前面的数字是否和当前数字相同,以及是否被使用过。
代码
class Solution:
"""
@param: : A list of integers
@return: A list of unique permutations
"""
def __init__(self):
self.res_list = []
self.visited = []
def bfs(self, index, nums, num_list):
if index == len(nums):
self.res_list.append(num_list[:])
return True
for i, v in enumerate(nums):
if i != 0 and nums[i] == nums[i - 1] and not self.visited[i - 1]:
continue
if not self.visited[i]:
self.visited[i] = 1
num_list.append(v)
self.bfs(index + 1, nums, num_list)
num_list.pop(-1)
self.visited[i] = 0
def permuteUnique(self, nums):
# write your code here
if not nums: return [[]]
nums.sort()
self.visited = [0 for i in range(len(nums))]
self.bfs(0, nums, [])
return self.res_list