更多精彩内容,请关注【力扣中等题】。
题目
难度:★★★☆☆
类型:数学
方法:回溯法
给定一个可包含重复数字的序列,返回所有不重复的全排列。
示例
输入: [1,1,2]
输出:
[
[1,1,2],
[1,2,1],
[2,1,1]
]
解答
这道题和【题目46. 全排列】很像,我们可以通过排序的方式过滤掉一批重复情况。这里使用临时变量visited。
class Solution:
def permuteUnique(self, nums):
"""
:param nums: List[int]
:return: List[List[int]]
"""
nums.sort()
res = []
visited = set()
def backtrack(nums, tmp):
if len(nums) == len(tmp):
res.append(tmp)
return
for i in range(len(nums)):
if i in visited or (i > 0 and i - 1 not in visited and nums[i-1] == nums[i]):
continue
visited.add(i)
backtrack(nums, tmp + [nums[i]])
visited.remove(i)
backtrack(nums, [])
return res
如有疑问或建议,欢迎评论区留言~