47. 全排列 II
题目描述
给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。
示例
输入:nums = [1,1,2]
输出:
[[1,1,2],
[1,2,1],
[2,1,1]]
思路
排序,bps,剪枝
代码
class Solution:
def permuteUnique(self, nums: List[int]) -> List[List[int]]:
class Node:
def __init__(self, li1, li2):
self.li1 = li1
self.li2 = li2
stark = []
res = []
nums.sort()
for i, item in enumerate(nums):
li = nums[:]
li.pop(i)
tmpNode = Node([item], li)
if stark == [] or tmpNode.li1 != stark[-1].li1:
stark.append(tmpNode)
while stark:
tmp = stark.pop()
if len(tmp.li2) <= 1:
li = tmp.li1 + tmp.li2
if res == [] or li != res[-1]:
res.append(li)
else:
for i, item in enumerate(tmp.li2):
li = tmp.li2[:]
li.pop(i)
tmpNode = Node(tmp.li1 + [tmp.li2[i]], li)
if stark == [] or tmpNode.li1 != stark[-1].li1:
stark.append(tmpNode)
return res
执行效率
执行用时:
48 ms, 在所有 Python3 提交中击败了82.89%的用户
内存消耗:
15.1 MB, 在所有 Python3 提交中击败了77.93%的用户
题目来源
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/permutations-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。