Skip to content

Latest commit

 

History

History
107 lines (84 loc) · 2.13 KB

78.子集.md

File metadata and controls

107 lines (84 loc) · 2.13 KB

78. 子集

url

题目

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

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

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

方法

code

js

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
}

go

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
}

java

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);
        }
    }
}