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

leetcode hot100【LeetCode 78. 子集】java实现

LeetCode 78. 子集

题目描述

给定一个不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。

说明: 解集不能包含重复的子集。

示例:

输入: nums = [1,2,3]
输出:
[
  [3],
  [1],
  [2],
  [1,2,3],
  [1,3],
  [2,3],
  [1,2],
  []
]
Java 实现解法
import java.util.ArrayList;
import java.util.List;

public class Solution {
    public List<List<Integer>> subsets(int[] nums) {
        List<List<Integer>> result = new ArrayList<>();
        backtrack(result, new ArrayList<>(), nums, 0);
        return result;
    }

    private void backtrack(List<List<Integer>> result, List<Integer> current, int[] nums, int index) {
        // 将当前子集加入结果
        result.add(new ArrayList<>(current));

        // 尝试从当前 index 开始构建子集
        for (int i = index; i < nums.length; i++) {
            current.add(nums[i]);  // 添加元素到当前子集
            backtrack(result, current, nums, i + 1);  // 递归处理下一个元素
            current.remove(current.size() - 1);  // 回溯
        }
    }
}
解题思路
  1. 回溯法

    • 问题的本质是生成一个数组的所有子集,可以看作是枚举所有可能的子集。
    • 从数组 nums 中选取元素时,对于每个元素,有两种选择:要么包含它,要么不包含它。
    • 可以通过回溯来实现:在递归过程中,不断地选择包含或者不包含当前元素,并将每个生成的子集加入到结果列表中。
    • 每当递归到一个位置时,就将当前路径(子集)加入结果列表,并继续尝试将剩余的元素加入子集。
  2. 递归+回溯

    • 每一步递归选择当前元素加入子集或者不加入。
    • 使用回溯来删除当前选择的元素并继续探索其他可能性。
复杂度分析
  • 时间复杂度O(n*2^n),其中n是数组的长度。这是因为对于每个子集,算法都需要遍历数组一次来决定是否包含当前元素。
  • 空间复杂度O(n),递归的最大深度为 n,即当前子集的大小最多为 n。因此,递归栈的空间复杂度为 O(n)

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

相关文章:

  • 【p2p、分布式,区块链笔记 Torrent】WebTorrent 的lt_donthave插件
  • 【系统架构设计师】高分论文:论企业应用系统的分层架构风格
  • 【IC验证】systemverilog的设计特性
  • Elasticsearch-linux环境部署
  • Swift 开发教程系列 - 第10章:泛型
  • 将自己的项目打包成一个docker发布
  • 船体平整如镜,玛哈特矫平机为航海安全保驾护航
  • Docker Compose部署Rabbitmq(Dockerfile安装延迟队列)
  • Vue 3 单元测试与E2E测试
  • github.io出现的问题及解决方案
  • FastAPI —— 请求参数验证
  • 中酱:健康生活的先行者
  • 【SpringCloud】Kafka消息中间件
  • 操作系统面试题
  • ssm060基于SSM的高校共享单车管理系统的设计与实现+vue(论文+源码)_kaic
  • 前端md5加密
  • 高级Python自动化运维:容器安全与网络策略的深度解析
  • 深入学习指针(5)!!!!!!!!!!!!!!!
  • 5G的发展演进
  • Java智慧养老养老护理帮忙代办陪诊陪护平台系统小程序源码
  • cmake中execute_process详解
  • 全卷积和全连接
  • C++20 STL CookBook2 更强大的编译时 + 安全比较 + spaceship比较符
  • IP SSL证书
  • 22.04Ubuntu---ROS2使用rclcpp编写节点
  • Catsxp云游戏白屏