给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
Input: nums = [1,2,3]
Output:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
算法思路;
常规dfs可解,每一个数字可选,可不选,对于n个数字则有2的n次方个解。
class Solution {
public static boolean v[] = new boolean[100]; //定义标记数组,true表示选当前数,false表示不选
public static List<List<Integer>> ans = new ArrayList<List<Integer>>();
public void root(int idx,int[] nums,boolean v[])//idx表示当前数下标
{
if(idx>=nums.length){ //得到一组解
List<Integer> r = new ArrayList<Integer>();
for(int i=0;i<nums.length;i++)
{
if(v[i])
r.add(nums[i]);//若为true就选入
}
ans.add(r); //当前解加入ans
return ;
}
v[idx]=true; //选入当前数
root(idx+1,nums,v);
v[idx]=false;//不选当前数
root(idx+1,nums,v);
}
public List<List<Integer>> subsets(int[] nums) {
ans.clear();
root(0,nums,v); //从下标0开始遍历
return ans;
}
}