原題
給出一個具有重復(fù)數(shù)字的列表,找出列表所有不同的排列
給出列表[1,2,2],不同的排列有:
[
[1,2,2],
[2,1,2],
[2,2,1]
]
解題思路
- 首先數(shù)組排序,跳出recursion條件為
len(path) == len(num)
- 設(shè)置一個flag數(shù)組,來判定一個元素是否被訪問過
- 如果
previous
沒有被訪問,而且current == previous
,則會出現(xiàn)重復(fù),所以跳過
完整代碼
class Solution(object):
def permuteUnique(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
result = []
flags = [False] * len(nums)
self.permuteForReal(sorted(nums), result, flags, [])
return result
def permuteForReal(self, num, output, flags, path):
if len(path) == len(num):
output.append(path[:])
return
for i in range(len(num)):
if not flags[i]:
if i != 0 and not flags[i-1] and num[i] == num[i-1]:
continue
path.append(num[i])
flags[i] = True
self.permuteForReal(num, output, flags, path)
path.pop()
flags[i] = False