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);
        }
    }
}

错误经验吸取

相关推荐
To_OC7 小时前
LC 128 最长连续序列:别上来就排序,O (n) 解法才是这题的灵魂
javascript·算法·leetcode
人活一口气12 小时前
Spring Boot与AIGC的完美结合:从零搭建智能内容生成平台
java·spring boot·aigc
像我这样帅的人丶你还14 小时前
Java 后端详解(三):全局异常处理与 JPA 数据库映射
java·后端
NE_STOP14 小时前
vibe Coding -- 小项目实战
java
未秃头的程序猿20 小时前
Java 26正式发布!这3个新特性,让代码量直接减半
java·后端·面试
用户2986985301420 小时前
Word 文档文本查找与替换的 Java 实现方案
java·后端
阿哉21 小时前
Nacos 服务发现源码:藏在背后的两套事件机制,90%的人只讲了一半
java
05Kevin21 小时前
lk每日冒险题--数据结构6.27
算法
咖啡八杯21 小时前
GoF设计模式——命令模式
java·设计模式·架构