【陪伴式刷题】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)
相关推荐
AAA修煤气灶刘哥10 分钟前
Java+AI 驱动的体检报告智能解析:从 PDF 提取到数据落地全指南
java·人工智能·后端
wxy31919 分钟前
嵌入式LINUX——————TCP并发服务器
java·linux·网络
★YUI★41 分钟前
学习游戏制作记录(玩家掉落系统,删除物品功能和独特物品)8.17
java·学习·游戏·unity·c#
微小的xx44 分钟前
java + html 图片点击文字验证码
java·python·html
mask哥1 小时前
详解flink java基础(一)
java·大数据·微服务·flink·实时计算·领域驱动
克拉克盖博1 小时前
chapter03_Bean的实例化与策略模式
java·spring·策略模式
DashVector1 小时前
如何通过Java SDK分组检索Doc
java·数据库·面试
程序员清风2 小时前
跳表的原理和时间复杂度,为什么还需要字典结构配合?
java·后端·面试
渣哥2 小时前
Kafka消息丢失的3种场景,生产环境千万要注意
java
渣哥2 小时前
ElasticSearch深度分页的致命缺陷,千万数据查询秒变蜗牛
java