题目
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例
输入: nums = [1,2,3]
输出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
代码
class Solution {
public List<List<Integer>> subsets(int[] nums) {
Arrays.sort(nums);
List<List<Integer>>list=new ArrayList<>();
List<Integer>list_copy=new ArrayList<>();
//i=z;表示添加所以子集为z的情况;
for(int i=0;i<=nums.length;i++){
JiSuan(list,list_copy,0,i,nums);
}
return list;
}
public void JiSuan(List<List<Integer>>list,List<Integer>list_copy,int index,int length,int[]nums){
if(list_copy.size()==length){list.add(new ArrayList<>(list_copy));return;}
if(list_copy.size()>length){return;}
for(int i=index;i<nums.length;i++){
if(index>0&&i==index&&nums[index]==nums[index-1]){
continue;
}
list_copy.add(nums[i]);
JiSuan(list,list_copy,i+1,length,nums);
list_copy.remove(list_copy.size()-1);
}
}
}