You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LeetCode Subsets II问题调试:DFS代码输出缺失子集

问题分析与修复

你的DFS代码缺失子集的原因是去重条件错误。当前的判断if i > 0 and nums[i] == nums[i-1]: continue会跳过所有与前一个元素相同的项,但实际上我们只需要跳过同一层递归中重复的元素——也就是当i > pos(而非i > 0)且当前元素与前一个元素相同时才跳过。

举个例子:当处理到pos=1的层级(此时当前子集是[],要选第二个位置的元素),i=1对应的是第一个2,这时候i等于pos,即使nums[i]和nums[i-1]相同,也应该保留这个选择,这样才能生成[2]之后的[2,2];而如果i>pos(比如i=2,此时pos=1),nums[i]和nums[i-1]相同,这时候才需要跳过,避免生成重复的子集。

修正后的代码

def subsets_dfs(nums):
    nums.sort()
    res = []
    def dfs(nums, res, cur, pos):
        res.append(cur)
        for i in range(pos, len(nums)):
            # 修正去重条件:仅当i大于当前起始位置pos时,才跳过重复元素
            if i > pos and nums[i] == nums[i-1]:
                continue
            dfs(nums, res, cur + [nums[i]], i + 1)
    dfs(nums, res, [], 0)
    return res

测试输入nums = [1,2,2],输出结果为:
[[], [1], [1, 2], [1, 2, 2], [2], [2, 2]],与题目要求的正确结果一致(顺序略有不同,但子集内容完全符合要求)。

内容的提问来源于stack exchange,提问作者VRM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 19:05:21