78.子集

代码解答


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]]

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。 示例: 代码
    vbuer阅读 91评论 0 0
  • 动态规划 111. 爬楼梯思路类似斐波那契数列注意考虑第 0 阶的特殊情况 272. 爬楼梯 II思路类似上题,只...
    6默默Welsh阅读 2,633评论 0 1
  • 5月8日,“2018首届爱之链电影奖”在成都金沙剧场隆重揭晓,从曲周走出的青年电影导演刘俊峰的作品《小山的秘密》一...
    邯郸李治山阅读 3,321评论 2 0
  • 即使因为做自己而被讨厌,也胜过扭曲自己而被喜欢。 ———蔡康永 与其...
    Leticia多读书早睡觉阅读 194评论 0 0
  • 白飞飞眼波一动,不答反问:“怎么突然如此心急?” 欧阳明日握住白飞飞的手,慢慢道:“洛笙是个强劲的对手,我不愿夜长...
    半盏风月阅读 830评论 0 0

友情链接更多精彩内容