全排列 II
题目描述:
给定一个可包含重复数字的序列,返回所有不重复的全排列。
示例
输入: [1,1,2]
输出:
[
[1,1,2],
[1,2,1],
[2,1,1]
]
解题思路:
这题整体思路同permutation相近
- 我们核心思想是创建一个标记参数
previousNum
来表示该数字是否是已经出现过重复的数字,如果是,就不能将其作为递归的首位数字,使用continue
跳过 - 然后通过循环,将不同数字作为起始位;通过遍历,将其后的数字填入依序填入;通过标记参数来保证数字使用的唯一性
Python源码:
from typing import List
class Solution:
def permuteUnique(self, nums: List[int]) -> List[List[int]]:
length = len(nums)
if length == 0:
return []
if length == 1:
return [nums]
nums.sort()
res = []
previousNum = None # 标记重复数字
for i in range(length):
if nums[i] == previousNum:
continue
previousNum = nums[i]
for j in self.permuteUnique(nums[:i] + nums[i + 1:]):
res.append([nums[i]] + j)
return res
欢迎关注我的github:https://github.com/UESTCYangHR