题目描述
题解思路
初始化一个变量start表示当前从哪里开始遍历nums
搜索过程的数字组合加入结果集
从start开始遍历nums
如果当前元素和前一个元素相等,前一个元素没被使用,则触发剪枝去重操作,跳过当次遍历
否则,将start赋值为当前元素的下一个,递归搜索,然后跳过重复的数字,进行剪枝文章来源:https://www.toymoban.com/news/detail-807094.html
直到搜索完毕,返回结果集文章来源地址https://www.toymoban.com/news/detail-807094.html
题解代码
class Solution:
def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:
nums.sort()
start = 0
res = []
tmp = []
n = len(nums)
def dfs():
nonlocal start
res.append([num for num in tmp])
i = start
while i < n:
start = i + 1
tmp.append(nums[i])
dfs()
tmp.pop()
while i < n - 1 and nums[i] == nums[i+1]:
i+=1
i+=1
dfs()
return res
到了这里,关于LeetCode讲解篇之90. 子集 II的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!