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去重
//作为单独元素回溯时,同一个元素不能出现两次

 if (i>startUsedIndex && nums[i-1] == nums[i]){
   
	continue;
 }

参考代码:

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

错误经验吸取

相关推荐

  1. 子集II(力扣90

    2023-12-11 16:42:01       10 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-11 16:42:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-11 16:42:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-11 16:42:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-11 16:42:01       20 阅读

热门阅读

  1. 【数据结构】栈(代码篇)

    2023-12-11 16:42:01       37 阅读
  2. python输出菱形字符图案 附实战代码

    2023-12-11 16:42:01       38 阅读
  3. mysql表的字段建议加上NOT NULL约束

    2023-12-11 16:42:01       41 阅读
  4. 如何使用rollup打包编译electron主进程代码

    2023-12-11 16:42:01       38 阅读
  5. Leetcode 2959. Number of Possible Sets of Closing Branches

    2023-12-11 16:42:01       42 阅读
  6. AES加密的使用笔记(ECB和GCM加密模式-前端)

    2023-12-11 16:42:01       39 阅读
  7. 《C++新经典设计模式》之第17章 中介者模式

    2023-12-11 16:42:01       25 阅读
  8. H3C网络设备交换机风扇亮黄灯故障处理

    2023-12-11 16:42:01       76 阅读
  9. PTA 7-226 sdut-C语言实验-矩阵输出(数组移位)

    2023-12-11 16:42:01       42 阅读
  10. C项目编译和链接[CL]

    2023-12-11 16:42:01       31 阅读