给你一个整数数组 nums
,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。
解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。
输入:nums = [1,2,3]
输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
输入:nums = [0]
输出:[[],[0]]
let subsets = nums => {
let ret = [];
if (nums === null || nums.length === 0)
return ret;
let dfs = (start, size, list) => {
if (list.length === size) {
ret.push(list.slice());
return;
}
for (let i = start; i < nums.length; i++) {
list.push(nums[i]);
dfs(i+1, size, list);
list.pop()
}
}
for (let i = 0; i <= nums.length; i++) {
dfs(0, i, []);
}
return ret
}
func subsets(nums []int) [][]int {
var res [][]int
var dfs func(nums []int, start, size int, list []int)
dfs = func(nums []int, start, size int, list []int) {
if len(list) == size {
res = append(res, append([]int{}, list...))
return
}
for i := start; i < len(nums); i++ {
list = append(list, nums[i])
dfs(nums, i+1, size, list)
list = list[:len(list)-1]
}
}
for i := 0; i <= len(nums); i++ {
dfs(nums, 0, i, []int{})
}
return res
}
class Solution {
List<List<Integer>> ret = new ArrayList<>();
public List<List<Integer>> subsets(int[] nums) {
if (nums == null || nums.length == 0)
return ret;
List<Integer> list = new ArrayList<>();
for (int i = 0; i <= nums.length; i++) {
dfs(nums, 0, i, list);
}
return ret;
}
public void dfs(int[] nums, int start, int size, List<Integer> list){
if (list.size() == size){
ret.add(new ArrayList(list));
return;
}
for (int i = start; i < nums.length; i++) {
list.add(nums[i]);
dfs(nums, i + 1, size, list);
list.remove(list.size() - 1);
}
}
}