美文网首页
78. Subsets 子集

78. Subsets 子集

作者: sarto | 来源:发表于2022-04-20 09:27 被阅读0次

题目

给定一个整数数组,返回所有可能的子集。子集必须是不重复的。

解析

这个问题和上一个问题相似,就是求 cn0 + cnn。
首先看看 cnk 的解法。
f(nums, k) [][]int

伪代码

len=len(nums)
if k == 0 
  return [][]int{{}}
for len >= k
  rst += nums[len-1] + f(nums[:len-1], k-1)
  len--
return rst

代码

func subsets(nums []int) [][]int {
    var rst [][]int
    for i:=0;i<=len(nums);i++ {
        tmp := sub(nums, i)
        rst=append(rst, tmp...)
    }
    return rst
}

func sub(nums []int, k int) [][]int {
    var rst [][]int
    if k == 0 {
        return [][]int{{}}
    }
    tail := len(nums)
    for tail>=k {
        tmp := sub(nums[:tail-1], k-1)
        for i := range tmp {
            rst=append(rst, append([]int{nums[tail-1]}, tmp[i]...))
        }
        tail--
    }
    return rst
}
image.png

后记

  1. 此类问题,可以概括为 cnk ,排列组合问题。

相关文章

网友评论

      本文标题:78. Subsets 子集

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