题目
给定一个可包含重复数字的序列,返回所有不重复的全排列。
链接:https://leetcode.com/problems/permutations-ii/
Given a collection of numbers that might contain duplicates, return all possible unique permutations.
Example:
Input: [1,1,2]
Output:
[
[1,1,2],
[1,2,1],
[2,1,1]
]
思路及代码
DFS
- 同样深度相同数字只能用一次
class Solution:
def permuteUnique(self, nums: List[int]) -> List[List[int]]:
cur = []
ans = []
used = [0]*len(nums)
nums = sorted(nums)
def dfs(used, cur, ans):
if sum(used) == len(nums):
ans.append(cur.copy())
return
for i in range(len(nums)):
if i > 0 and nums[i] == nums[i-1] and used[i-1] == 0:
continue
if used[i] == 1:
continue
cur.append(nums[i])
used[i] = 1
dfs(used, cur, ans)
used[i] = 0
cur.pop()
dfs(used, cur, ans)
return ans
复杂度
T =
O
(
n
!
)
O(n!)
O(n!)
S =
O
(
n
)
O(n)
O(n)