90. 子集 II

90. 子集 II

原题链接:

90. 子集 II

https://leetcode.cn/problems/subsets-ii/description/

完成情况:

解题思路:

/**

* 包含重复元素,但不包含重复解集。

*

* @param nums

* @return

*/

public List<List> subsetsWithDup(int[] nums) {

//输入:nums = [1,2,2]

//输出:[[],[1],[1,2],[1,2,2],[2],[2,2]]

// TODO 方法一:永远记住有个暴力的Set去重

//作为单独元素回溯时,同一个元素不能出现两次

java 复制代码
 if (i>startUsedIndex && nums[i-1] == nums[i]){
	continue;
 }

参考代码:

java 复制代码
package 代码随想录.回溯;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class _90子集II {
    List<List<Integer>> result = new ArrayList<List<Integer>>();
    List<Integer> listSubsets = new ArrayList<Integer>();
    /**
     * 包含重复元素,但不包含重复解集。
     *
     * @param nums
     * @return
     */
    public List<List<Integer>> subsetsWithDup(int[] nums) {
        //输入:nums = [1,2,2]
        //输出:[[],[1],[1,2],[1,2,2],[2],[2,2]]
        // TODO 方法一:永远记住有个暴力的Set去重
        //作为单独元素回溯时,同一个元素不能出现两次
        Arrays.sort(nums);
        backTrack(nums,0);  //想一下终止条件是啥?不像前面还有分隔逗号判断,这个只有长度判断
        return result;
    }

    /**
     *
     * @param nums
     * @param startUsedIndex
     */
    private void backTrack(int[] nums, int startUsedIndex) {
        //这道题空集也算,部分也算,所以直接添加
        result.add(new ArrayList<>(listSubsets));
//        if (startUsedIndex == nums.length - 1) {
//            return;
//        }
        //里面就得采取剪枝
        for (int i = startUsedIndex;i< nums.length;i++){
            // 跳过当前树层使用过的、相同的元素
            //如果这里不加判断则直接使用了
            if (i>startUsedIndex && nums[i-1] == nums[i]){
                continue;
            }
            listSubsets.add(nums[i]);
            backTrack(nums,i+1);
            listSubsets.remove(listSubsets.size()-1);
        }
    }
}

错误经验吸取

相关推荐
abcnull1 小时前
用javaparser做精准测试
java·ast·静态代码分析·精准测试·javaparser
叶小鸡1 小时前
Java 篇-项目实战-苍穹外卖-笔记汇总
java·开发语言·笔记
AI人工智能+电脑小能手1 小时前
【大白话说Java面试题】【Java基础篇】第22题:HashMap 和 HashSet 有哪些区别
java·开发语言·哈希算法·散列表·hash
昵称小白1 小时前
复杂度分析方法
算法
juniperhan1 小时前
Flink 系列第21篇:Flink SQL 函数与 UDF 全解读:类型推导、开发要点与 Module 扩展
java·大数据·数据仓库·分布式·sql·flink
科研前沿2 小时前
2026 数字孪生前沿科技:全景迭代报告 —— 镜像视界生成式孪生(Generative DT)技术白皮书
大数据·人工智能·科技·算法·音视频·空间计算
ID_180079054732 小时前
Python 实现亚马逊商品详情 API 数据准确性校验(极简可用 + JSON 参考)
java·python·json
c++之路2 小时前
C++23概述
java·c++·c++23
专注API从业者3 小时前
Open Claw 京东商品监控选品实战:一键抓取、实时监控、高效选品
java·服务器·数据库
摇滚侠3 小时前
DBeaver 导入数据库 导入 SQL 文件 MySQL 备份恢复
java·数据库·mysql