LeetCode
面试题 08.04. 幂集
幂集。编写一种方法,返回某集合的所有子集。集合中不包含重复的元素。
说明:解集不能包含重复的子集。
示例:
输入: nums = [1,2,3]
输出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
解法:回溯法
解题思路:思路很简单,这是很基础的回溯问题,使用递归,我们来依次的选择子集中的数字,我们有两种选择
- 选数字,为了不选同一个数字,我们使用一个begin变量来表示该数字的可选范围,begin->nums.length就是该数字的可选范围,下一个数字只能选择前一个数字选择的下一个
- 不选数字,这时候,为了避免重复,比如说123,如果第一个数字和第二个数字不选,而第三个数字选了3,跟另一种情况,第一个数字选3,其他数字不能选,重复了,所以当我们有一个数字不能选时,直接生成子集就可以了,后面的数字都不能选,因为后面能选的我前面就能选
完整代码:
class Solution {
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> res= n