求给定数组所有可能的子集 |leetcode78

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

示例: 输入: nums = [1,2,3] 输出:[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]

最开始看这道题目的时候感觉其实很简单,所以就马上开始做,结果走了很多弯路,费尽力气AC了第一种解法,结果证明这种解法非常鸡肋… 所以提交通过之后还是念念不忘,昨晚入睡前一直在想,竟然想到了一个idea,早晨试过之后果然可以,而且耗时较第一种方法小很多…虽然可能也不是最优的,但还是很兴奋,觉得有必要记录一下~

以下是上文提到的两种解法:

  • 解法1:

这种解法其实没有太多参考意义,可直接略过,我写这部分只是为记录一下我走过的弯路🙁

这个思路也很简单,首先要添加空集,这里我使用了一个过程中使用的temp变量,用来暂时存放属于子集的集合。

关键的想法是,最终的子集中的集合的长度是从0到nums.length,那么我把 [] 添加到结果中后只要从个数为1,遍历到个数为nums.length就可以得到最终的结果。

举例来说 如果当前给定的集合是[1, 2, 3]

那么首先初始化temp 包含 [],并把 [] 添加到结果集中

第一次循环:(添加那些size为1的集合)

[1], [2], [3] 这三个集合被得到并添加至temp中,这时我们把temp中新增的 [1], [2], [3] 加入到结果集中并将其从temp中移除 []

第二次循环:(添加那些size为2的集合&#x

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值