题目链接
题目描述
给定一个可包含重复数字的整数集合 nums ,按任意顺序 返回它所有不重复的全排列。
示例 1:
输入:nums = [1,1,2]
输出:
[[1,1,2],
[1,2,1],
[2,1,1]]
示例 2:输入:nums = [1,2,3]
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
提示:
1 <= nums.length <= 8
-10 <= nums[i] <= 10
解题思路
回溯总结:
数据集里的元素有没有重复的,对应的措施就是排序
数据集里的元素允不允许重复使用,对应的措施就是递归的时候index加不加1
for循环的选择,如果i从index开始,一般不需要辅助标记;如果i从0开始(意味着全排列),可能需要辅助标记。
代码
Python
class Solution:
def permuteUnique(self, nums: list[int]) -> list[list[int]]:
def backTrack():
if len(path) == n:
ans.append(path[:])
return
for i in range(n):
if i > 0 and nums[i] == nums[i - 1] and not vis[i - 1]:
continue
if not vis[i]:
vis[i] = True
path.append(nums[i])
backTrack()
vis[i] = False
path.pop()
ans, path = [], []
nums.sort()
n = len(nums)
vis = [False] * n
backTrack()
return ans