LeetCode-90-子集Ⅱ

题目描述:给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。

解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。

题目链接:LeetCode-90-子集Ⅱ

解题思路:跟 组合总和Ⅱ相似,都需要去重操作。

注意要先对数组排序,方便去重。
代码实现:

java 复制代码
class Solution {
    List<List<Integer>> res = new ArrayList<>();
    List<Integer> path = new ArrayList<>();
    public List<List<Integer>> subsetsWithDup(int[] nums) {
        Arrays.sort(nums);//先排序,有利于去重
        boolean[] use = new boolean[nums.length];// use[i]=true,表示该位置已经被用过了
        backTracking(nums, 0, use);
        return res;
    }

    public void backTracking(int[] nums, int startIndex, boolean[] use){
        res.add(new ArrayList<>(path));//要找的是每个节点,而不仅是叶子节点
        if (startIndex >= nums.length){
            return;
        }
        for (int i = startIndex; i < nums.length; i++) {
            if (i>0 && nums[i-1] == nums[i] && use[i-1]==false){// 树层去重,如[1,2,2],第一个2已经走过了,就不走第二个 2 了
                continue;
            }
            path.add(nums[i]);
            use[i] = true;
            backTracking(nums, i+1, use);
            path.remove(path.size()-1);
            use[i] = false;
        }
    }
}
相关推荐
edtoplort4 小时前
OpenAI紧急叫停GPT-6.1 Astra训练,奥尔特曼为何踩刹车
人工智能·gpt·算法
蒜香可达鸭4 小时前
让视频生成流水线跑不崩:一个事件溯源的多 Agent 可靠执行框架
算法
小羊没烦恼!5 小时前
系统内部模块(子系统)之间的耦合以及模块(子系统)划分
java·开发语言·前端·数据库·算法·c#
Nebula_g5 小时前
JavaSE拓展:Arrays和Collections工具类
java·开发语言·算法·排序算法·工具类·javase·技术栈
菜鸟~noob2335 小时前
【电子战】 第22篇:误差椭圆与置信区间【含matlab代码】
开发语言·算法·matlab
weixin_307779135 小时前
C++代码实现MATLAB中的normalize函数功能
开发语言·c++·算法·matlab
不会就选b5 小时前
算法日常・每日刷题--<动态规划>11
算法
(Charon)6 小时前
【C++面试】手写String类:同时实现拷贝构造与移动构造
c++·算法
迷途之人不知返6 小时前
算法系列6:模拟
算法
旺仔仔仔6 小时前
# 机器人项目实战(1):选相机、试深度,再到手眼标定
算法