LeetCode刷题之47.全排列 II

LeetCode刷题之47.全排列 II

我不知道将去向何方,但我已在路上!
时光匆匆,虽未曾谋面,却相遇于斯,实在是莫大的缘分,感谢您的到访 !
  • 题目
    给定一个可包含重复数字的序列,返回所有不重复的全排列。
  • 示例
输入: [1,1,2]
输出:
[
  [1,1,2],
  [1,2,1],
  [2,1,1]
]
  • 代码:
class Solution:
    def permuteUnique(self, nums: List[int]) -> List[List[int]]:
        if len(nums) == 1:
            return [nums]
        a = []
        k = []
        for i in range(len(nums)):
            b = nums[:i] + nums[i+1:]
            s = nums[i]
            if s in k:
                continue
            else:
                k.append(s)
            c = self.permuteUnique(b)
            a = a+[[s]+ j for j in c]
        return a
# 执行用时 :88 ms, 在所有 Python3 提交中击败了77.36%的用户
# 内存消耗 :14.1 MB, 在所有 Python3 提交中击败了9.35%的用户
  • 算法说明:
    遍历数组中的所有元素,将除去当前元素的剩余元素b递归调用permuteUnique函数,用当前元素加上递归的返回结果。在每一层调用permuteUnique函数时,判断当前元素是否在当前元素所在根节点的子节点中出现过,如果出现则跳过不执行。具体执行如下图,便于理解,将执行过程用数字标出!
发布了90 篇原创文章 · 获赞 1 · 访问量 1046

猜你喜欢

转载自blog.csdn.net/qq_34331113/article/details/103147030