给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
输入: nums = [1,2,3]
输出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
解题思路
对数组的每个数,回溯向后查找所有可能的子集。再每一层需要将每一层的子集添加到答案中,并将其和生下来的数组继续组合拼成更大的子集,直到遍历完成
Java
class Solution {
public static void dfs(int n, int length, int[] nums,
List li, List> ans){
ans.add(new ArrayList<>(li));
if(n < length - 1){
for(int i=n+1;i
li.add(nums[i]);
dfs(i, length, nums, li, ans);
li.remove(li.size()-1);
}
}
}
public List> subsets(int[] nums) {
int length = nums.length;
List> ans = new ArrayList<>();
ans.add(new ArrayList<>());
for(int i=0;i
List li = new ArrayList<>();
li.add(nums[i]);
dfs(i, length, nums, li, ans);
}
return ans;
}
}
Python
class Solution(object):
def subsets(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
def dfs(n, li):
ans.append(li[:])
if n < length - 1:
for i in range(n + 1, length):
li.append(nums[i])
dfs(i, li)
li.pop()
length = len(nums)
ans = [[]]
for i in range(length):
dfs(i, [nums[i]])
return ans