【陪伴式刷题】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)
相关推荐
customer087 小时前
【开源免费】基于SpringBoot+Vue.JS体育馆管理系统(JAVA毕业设计)
java·vue.js·spring boot·后端·开源
Miketutu8 小时前
Spring MVC消息转换器
java·spring
乔冠宇8 小时前
Java手写简单Merkle树
java·区块链·merkle树
LUCIAZZZ9 小时前
简单的SQL语句的快速复习
java·数据库·sql
komo莫莫da9 小时前
寒假刷题Day19
java·开发语言
S-X-S10 小时前
算法总结-数组/字符串
java·数据结构·算法
linwq810 小时前
设计模式学习(二)
java·学习·设计模式
桦说编程11 小时前
CompletableFuture 超时功能有大坑!使用不当直接生产事故!
java·性能优化·函数式编程·并发编程
@_@哆啦A梦11 小时前
Redis 基础命令
java·数据库·redis
Joyner201811 小时前
python-leetcode-从中序与后序遍历序列构造二叉树
算法·leetcode·职场和发展