题目来源
题目描述
给你一个整数数组 nums ,返回该数组所有可能的子集(幂集)。解集不能包含重复的子集。
解答一
递归法实现子集枚举,时间复杂度是 O(2 ^ n)
class Solution {
List<Integer> t=new ArrayList<>();
List<List<Integer>> ans=new ArrayList<>();
public List<List<Integer>> subsets(int[] nums) {
dfs(0,nums);
return ans;
}
public void dfs(int cur,int[] nums){
if(cur==nums.length){
ans.add(new ArrayList<Integer>(t));
return;
}
t.add(nums[cur]);
dfs(cur+1,nums);
t.remove(t.size()-1);
dfs(cur+1,nums);
}
}
解答二
迭代法实现子集枚举
class Solution {
List<Integer> t=new ArrayList<>();
List<List<Integer>> ans=new ArrayList<>();
public List<List<Integer>> subsets(int[] nums) {
int n=nums.length;
for(int mask=0;mask<(1<<n);++mask){
t.clear();
for(int i=0;i<n;++i){
if((mask&(1<<i))!=0){
t.add(nums[i]);
}
}
ans.add(new ArrayList<Integer>(t));
}
return ans;
}
}