Leetcode047 permutations-ii

全排列 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

猜你喜欢

转载自blog.csdn.net/dzkdyhr1208/article/details/89374059
今日推荐