essay

hot100-子集

#算法

hot100——子集

给你一个整数数组 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 中的所有元素 互不相同

解法

func subsets(nums []int) [][]int {
    res := make([][]int, 0)
    path := make([]int, 0)
    dfs(nums, 0, path, &res)
    return res
}
 
// dfs 是递归函数
// nums: 原数组
// start: 当前可选的起始下标
// path: 当前已选择的元素切片
// res: 指向结果集的指针
func dfs(nums []int, start int, path []int, res *[][]int) {
    // 将当前路径加入结果(每个节点都是一个子集)
    tmp := make([]int, len(path))
    copy(tmp, path)
    *res = append(*res, tmp)
 
    // 从 start 开始遍历,避免重复组合
    for i := start; i < len(nums); i++ {
        // 做选择:将 nums[i] 加入 path
        path = append(path, nums[i])
        // 递归,下一轮从 i+1 开始
        dfs(nums, i+1, path, res)
        // 撤销选择
        path = path[:len(path)-1]
    }
}
comments如果有不同意见或者补充,直接留在这里。
contact

在别处继续找到我

如果你想聊技术、设计,或者只是打个招呼。

暂未配置外部链接