题目要求:给定一组不含重复元素的整数数组 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