leetcode78子集
Posted lisin-lee-cooper
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode78子集相关的知识,希望对你有一定的参考价值。
一.问题描述
- 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。
- 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。
- 示例 1:
- 输入:nums = [1,2,3]
- 输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
- 示例 2:
- 输入:nums = [0]
- 输出:[[],[0]]
二.示例代码
public class Subset78 {
static List<Integer> t = new ArrayList<>();
static List<List<Integer>> ans = new ArrayList<>();
public static void main(String[] args) {
int[] nums = new int[]{1, 2, 3};
subSet(nums);
System.out.println(ans);
}
public static List<List<Integer>> subSet(int[] nums) {
dfs(0, nums);
return ans;
}
public static void dfs(int cur, int[] nums) {
if (cur == nums.length) {
ans.add(new ArrayList<>(t));
return;
}
t.add(nums[cur]);
dfs(cur + 1, nums);
t.remove(t.size() - 1);
dfs(cur + 1, nums);
}
}
三.复杂度分析
时间复杂度:O(n*2^n) 。一共 2 ^ n 个状态,每种状态需要 O(n) 的时间来构造子集。
空间复杂度:O(n)。临时数组 t 的空间代价是 O(n),递归时栈空间的代价为 O(n)。
以上是关于leetcode78子集的主要内容,如果未能解决你的问题,请参考以下文章