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

leetcode——子集(java)

给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。

解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。

示例 1:

输入:nums = [1,2,3]
输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]

示例 2:

输入:nums = [0]
输出:[[],[0]]

解题方法:(回溯)

1.首先我们写出辅助函数,参数只需要当前路径的长度即可。

2.我们把情况分为以下几种情况:

  • 当我们的路径长度与目标数组长度一样时,说明走到头了,加入答案数组,返回。

  • 跳过当前地点,选择下一个地点。

  • 经过当前地点,将其加入到我们的路径中。

  • 递归继续去往下一个地点。

  • 最后记得恢复原样,达到回溯效果。

class Solution {
    private final List<List<Integer>> ans = new ArrayList<>();
    private final List<Integer> path = new ArrayList<>();
    private int[] nums;

    public List<List<Integer>> subsets(int[] nums) {
        this.nums = nums;
        dfs(0);
        return ans;    
    }

    private void dfs(int i) {
        if (i == nums.length) {
            ans.add(new ArrayList<>(path));
            return;
        }
        dfs(i + 1);
        path.add(nums[i]);
        dfs(i + 1);
        path.remove(path.size() - 1);
    }
}


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

相关文章:

  • 在Mapbox GL JS中“line-pattern”的使用详解
  • 无人机图传模块 wfb-ng openipc-fpv,4G
  • 拍照对比,X70 PRO与X90 PRO+的细节差异
  • CSS 样式化表格:从基础到高级技巧
  • 【Java】位图 布隆过滤器
  • 排序算法--快速排序
  • Python实现CAN FD 通信(基于PCAN开发CAN FD测试工具)
  • vue3新建组件库项目并上传到私库
  • 实时波形与频谱分析———傅立叶变换
  • RabbitMQ深度探索:消息幂等性问题
  • MongoDB 查询文档
  • 哈夫曼树原理及其C语言实现
  • 时间对象管理相关
  • gesp(C++六级)(13)洛谷:P11375:[GESP202412 六级] 树上游走
  • 因果推断与机器学习—可解释性、公平性和因果机器学习
  • go运算符
  • Redis缓存穿透、击穿、雪崩介绍以及解决方案
  • vscode 设置在编辑器的标签页超出可视范围时自动换行(workbench.editor.wrapTabs)
  • SpringBoot 基于个性化定制的智慧校园管理系统设计与开发 - 论文、开题报告
  • 搭建Python环境:为量化交易做准备
  • Linux之安装MySQL
  • Oh3.2项目升级到Oh5.0(鸿蒙Next)具体踩坑记录二
  • 正则表达式详细介绍
  • 题解:洛谷 P1744 采购特价商品
  • 算法随笔_39: 最多能完成排序的块_方法2
  • embeddingbag词袋