yankewei / LeetCode

LeetCode 问题的解决方法
MIT License
6 stars 0 forks source link

子集 #129

Open yankewei opened 3 years ago

yankewei commented 3 years ago

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

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

示例 1:

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

示例 2:

输入:nums = [0]
输出:[[],[0]]

提示:

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/subsets 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

yankewei commented 3 years ago

回溯

func subsets(nums []int) [][]int {
    lengthNum := generate(nums, []int{}, 0, &[][]int{{}})
    return lengthNum
}

func generate(nums []int, set []int, start int, ret *[][]int) [][]int {
    if start >= len(nums) {
    return *ret
    }
    set = append(set, nums[start])
    *ret = append(*ret, set)
    generate(nums, set, start+1, ret)
    // 这里要copy一个临时的变量,因为set是一个切片,切片的本事是一个数组的指针,所以会有影响
    tmp := make([]int, len(set)-1)
    copy(tmp, set[:len(set)-1])
    generate(nums, tmp, start+1, ret)
    return *ret
}