0%

leetcode题解47:全排列 II

描述

该题来自于力扣第47题

分析

类似第40题对于第39题的改变一样,在第46题的基础上,每次遍历的时候,注意跳过重复数字就好,至于跳过重复数组的方法,有很多种;比如先对数组排序,然后判断前后两个数字是否一样,一样就跳过;又或者初始化一个集合,然后判断集合中是否包含遍历到的数字,包含就跳过。

代码

python
1
2
3
4
5
6
7
8
9
10
11
12
class Solution:
def permuteUnique(self, nums: List[int]) -> List[List[int]]:
nums = sorted(nums)
if len(nums) == 1:
return [nums]
res = []
for i in range(len(nums)):
if i > 0 and nums[i] == nums[i-1]:
continue
for subres in self.permuteUnique(nums[:i] + nums[i+1:]):
res.append([nums[i]] + subres)
return res