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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值