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

错误经验吸取

相关推荐
Amor风信子几秒前
华为OD机试真题---跳房子II
java·数据结构·算法
戊子仲秋17 分钟前
【LeetCode】每日一题 2024_10_2 准时到达的列车最小时速(二分答案)
算法·leetcode·职场和发展
邓校长的编程课堂19 分钟前
助力信息学奥赛-VisuAlgo:提升编程与算法学习的可视化工具
学习·算法
杨荧26 分钟前
【JAVA开源】基于Vue和SpringBoot的洗衣店订单管理系统
java·开发语言·vue.js·spring boot·spring cloud·开源
sp_fyf_202436 分钟前
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-03
人工智能·算法·机器学习·计算机视觉·语言模型·自然语言处理
陈逸轩*^_^*43 分钟前
Java 网络编程基础
java·网络·计算机网络
这孩子叫逆1 小时前
Spring Boot项目的创建与使用
java·spring boot·后端
星星法术嗲人1 小时前
【Java】—— 集合框架:Collections工具类的使用
java·开发语言
Eric.Lee20211 小时前
数据集-目标检测系列- 螃蟹 检测数据集 crab >> DataBall
python·深度学习·算法·目标检测·计算机视觉·数据集·螃蟹检测
一丝晨光1 小时前
C++、Ruby和JavaScript
java·开发语言·javascript·c++·python·c·ruby