https://leetcode-cn.com/probl...
解题思路
cnts 是每个数字出现的次数
每次使用一个数字都尝试使用 1 个、2 个 ... 到用完这个数字。除此之外,不允许有两次连续选择相同数字
代码
class Solution:
def permuteUnique(self, nums: List[int]) -> List[List[int]]:
import collections
n = len(nums)
cnts = collections.Counter(nums)
nums = list(cnts.keys())
l = [0] * n
ans = []
def dfs(i):
if i == n:
ans.append(l[::])
return
for num in nums:
if i > 0 and l[i-1] == num: continue
oc = cnts[num]
if oc > 0:
j = 0
while cnts[num] > 0:
cnts[num] -= 1
l[i + j] = num
dfs(i+j+1)
j += 1
cnts[num] = oc
dfs(0)
return ans
欢迎来我的博客: https://codeplot.top/
我的博客刷题分类:https://codeplot.top/categories/%E5%88%B7%E9%A2%98/
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。