【陪伴式刷题】Day 24|回溯|78.子集(Subsets)

刷题顺序按照代码随想录建议

题目描述

英文版描述

Given an integer array nums of unique elements, return all possible

subsets

(the power set) .

The solution set must not contain duplicate subsets. Return the solution in any order.

Example 1:

Input: nums = [1,2,3] Output: [[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]

Example 2:

Input: nums = [0] Output: [[],[0]]

Constraints:

  • 1 <= nums.length <= 10
  • -10 <= nums[i] <= 10
  • All the numbers of nums are unique.

英文版地址

leetcode.com/problems/su...

中文版描述

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

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

示例 1:

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

示例 2:

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

提示:

  • 1 <= nums.length <= 10
  • -10 <= nums[i] <= 10
  • nums 中的所有元素 互不相同

中文版地址

leetcode.cn/problems/su...

解题方法

递归法

java 复制代码
class Solution {
   List<List<Integer>> result = new ArrayList<>();
    List<Integer> level = new ArrayList<>();

    /**
     * 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。
     * 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。
     * <p>
     * 示例 1:
     * 输入:nums = [1,2,3]
     * 输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
     *
     * @param nums
     * @return
     */
    public List<List<Integer>> subsets(int[] nums) {
        backTracking(nums, 0);
        return result;
    }

    private void backTracking(int[] nums, int startIndex) {
        result.add(new ArrayList<>(level));
    
        for (int i = startIndex; i < nums.length; i++) {
            level.add(nums[i]);
            backTracking(nums, i + 1);
            level.remove(level.size() - 1);
        }
    }
}

复杂度分析

  • 时间复杂度:O(n×2^n),一共 2^n个状态,每种状态需要 O(n)的时间来构造子集
  • 空间复杂度:O(n),临时List的空间代价是 O(n),递归时栈空间的代价为 O(n)
相关推荐
这就是佬们吗6 分钟前
告别 Node.js 版本冲突:NVM 安装与使用全攻略
java·linux·前端·windows·node.js·mac·web
何中应6 分钟前
@Autowrited和@Resource注解的区别及使用场景
java·开发语言·spring boot·后端·spring
一条咸鱼_SaltyFish7 分钟前
[Day16] Bug 排查记录:若依框架二次开发中的经验与教训 contract-security-ruoyi
java·开发语言·经验分享·微服务·架构·bug·开源软件
荒诞硬汉9 分钟前
递归的学习
java·学习
孤独天狼10 分钟前
java设计模式
java
一勺菠萝丶10 分钟前
Java 对接 PLC 实战:西门子 PLC 与永宏 PLC 通讯方式全面对比
java·开发语言·python
吴声子夜歌10 分钟前
Java数据结构与算法——数论问题
java·开发语言
这就是佬们吗12 分钟前
Windows 的 CMD 网络环境:解决终端无法联网与更新的终极指南
java·windows·git·python·spring·maven
栈与堆12 分钟前
数据结构篇(1) - 5000字细嗦什么是数组!!!
java·开发语言·数据结构·python·算法·leetcode·柔性数组
寻星探路18 分钟前
【深度长文】深入理解网络原理:TCP/IP 协议栈核心实战与性能调优
java·网络·人工智能·python·网络协议·tcp/ip·ai