当前位置: 首页 > article >正文

90.子集||

要求所有可能的子集,不能重复,因此对于相同的数字,要考虑去重,去重的方式就是通过排序,排序后相同的数字相邻,这样进行实现迭代时,若没有选择上一个数,,其当前数字与上一个数相同,则跳过当前生成的子集。
递归完成,撤销当前选择,继续其他选择。

class Solution {
    public List<List<Integer>> subsetsWithDup(int[] nums) {
        // 满足要求的返回结构
        List<List<Integer>> ans = new ArrayList<List<Integer>>();
        // 先排序
        Arrays.sort(nums);
        // 进行迭代
        backtrack(ans, new ArrayList<>(), nums, 0);
        return ans;

        


    }
    private void backtrack(List<List<Integer>> ans, List<Integer> tempList, int[] nums, int start){
            // 将当前子集添加到结果集中
            ans.add(new ArrayList<>(tempList));
            // 迭代
            for (int i = start; i < nums.length; i++){
                // 跳过重复元素
                if (i > start && nums[i] == nums[i-1]){
                    continue;
                }
                // 更新当前子集
                tempList.add(nums[i]);
                // 递归
                backtrack(ans, tempList, nums, i+1);
                // 回溯
                tempList.remove(tempList.size()-1);
            }
        }
}

http://www.kler.cn/a/535067.html

相关文章:

  • 生产环境超实用shell脚本一
  • MATLAB中matches函数用法
  • Python 数据挖掘与机器学习
  • 【Elasticsearch】date range聚合
  • 【R语言】获取数据
  • 【怎么用系列】短视频戒除-2-(移动端)定时关闭抖音等短视频
  • python学opencv|读取图像(五十五)使用cv2.medianBlur()函数实现图像像素中值滤波处理
  • node.js使用mysql2对接数据库
  • 【分布式理论五】分布式调用(3):服务注册与发现
  • Python批量重命名文件的实用案例
  • 【Linux高级IO】五种IO模型
  • 手写MVVM框架-渲染v-for列表(修改List)
  • VUE 集成企微机器人通知
  • hot100(8)
  • 《工业4.0时代?!》
  • 【Flutter】【WEB3】判断一个String是不是钱包地址
  • Linux——基础命令1
  • 线程同步时定义 std::mutex 为什么要在前面添加 mutable 关键字
  • 旋转变压器工作及解调原理
  • Vue3-管理状态 effectScope
  • OpenAI向所有用户开放ChatGPT搜索,无需账号登录
  • 网络工程师 (20)计算机网络的概念
  • [SAP ABAP] 面向对象程序设计-构造方法
  • SpringCloud基础 入门级 学习SpringCloud 超详细(简单通俗易懂)
  • 为什么使用springboot框架,springboot常用的配置文件,如何读取配置文件中自定义的内容,多环境下如何切换配置文件,包扫描原理,自动装配的原理
  • 变压器-000000