78.子集

作者: jianshujoker | 来源:发表于2018-10-30 16:24 被阅读0次

代码解答


func subsets(nums []int) [][]int {

    var res [][]int

    var temp []int

    //开始回溯 用指针是因为golang slice和其他语言数组有些不一样,增加长度时会指向新的地址

    dfs(&res,temp,nums,0)

    return res

}

//深度优先

func dfs(res *[][]int,temp []int,nums []int,j int){

    tp:=make([]int,len(temp),len(temp))

    //复制临时数组记录遍历节点,避免数据混乱

    copy(tp,temp)

    *res=append(*res,tp)

    for i:=j;i<len(nums);i++{

        //遍历到当前节点

        temp=append(temp,nums[i])

        dfs(res,temp,nums,i+1)

        //回到当前节点的上一节点

        temp=temp[:len(temp)-1]

    }

}

思路解析

读题分析应该用递归,第一个数与剩余数组合,第二个数与排除第一个数后剩余数组合...到达边界后返回上一节点继续遍历

以输入nums = [1,2,3]为例转换为的树

image

以输入nums = [1,2,3]为例遍历到的顺序


&[[]]

&[[] [1]]

&[[] [1] [1 2]]

&[[] [1] [1 2] [1 2 3]]

&[[] [1] [1 2] [1 2 3] [1 3]]

&[[] [1] [1 2] [1 2 3] [1 3] [2]]

&[[] [1] [1 2] [1 2 3] [1 3] [2] [2 3]]

&[[] [1] [1 2] [1 2 3] [1 3] [2] [2 3] [3]]

相关文章

  • LeetCode-78-子集

    LeetCode-78-子集 78. 子集[https://leetcode-cn.com/problems/su...

  • LeetCodeDay53 —— 子集★★

    78. 子集 Subsets 描述 Given a set of distinct integers, nums,...

  • 回溯递归算法

    回溯大法严重依赖【递归】 1、求子集 78. 子集[https://leetcode-cn.com/problem...

  • 子集 + 子集 II AND 零花钱兑换 + 零钱兑换 II

    78. 子集[https://leetcode-cn.com/problems/subsets/] 方法一 枚举 ...

  • 78.子集

    题目给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 ...

  • 78.子集

    代码解答 思路解析 读题分析应该用递归,第一个数与剩余数组合,第二个数与排除第一个数后剩余数组合...到达边界后返...

  • 78. 子集

    题目描述 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子...

  • 78. 子集

    给定一组不含重复元素的整数数组nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 示例:...

  • 78. 子集

    很经典的回溯问题,每一次的递归结束后,return。会继续执行removelast语句先存起来,在此基础上实现子集的遍历

  • 78. 子集

    (不同的整数,返回所有可能的子集,离散数学中叫power set)

网友评论

      本文标题:78.子集

      本文链接:https://www.haomeiwen.com/subject/newgtqtx.html