0
点赞
收藏
分享

微信扫一扫

78. 子集【中等】Golang

骑在牛背上看书 2022-04-26 阅读 53
leetcodego

题目

迭代法实现子集枚举

func subsets(nums []int) (ans [][]int) {
    n := len(nums)
    for mask := 0; mask < 1<<n; mask++ {
        set := []int{}
        for i, v := range nums {
            if mask>>i&1 > 0 {
                set = append(set, v)
            }
        }
        ans = append(ans, append([]int(nil), set...))
    }
    return
}
  • 时间复杂度:O(n× 2 n 2^n 2n)
  • 空间复杂度:O(n)

递归法实现子集枚举

func subsets(nums []int) (ans [][]int) {
    set := []int{}
    var dfs func(int)
    dfs = func(cur int) {
        if cur == len(nums) {
            ans = append(ans, append([]int(nil), set...))
            return
        }
        set = append(set, nums[cur])
        dfs(cur + 1)
        set = set[:len(set)-1]
        dfs(cur + 1)
    }
    dfs(0)
    return
}
  • 时间复杂度:O(n× 2 n 2^n 2n)
  • 空间复杂度:O(n)
举报

相关推荐

0 条评论