04-Power-Set-LCCI
Last updated
Last updated
class Solution {
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> result=new ArrayList<>();
if(nums== null || nums.length==0){
result.add(new ArrayList<Integer>());
return result;
}
List<Integer> curResult=new ArrayList<>();
recur(nums,0,curResult,result);
return result;
}
private void recur(int[] nums,int index,List<Integer> curResult,List<List<Integer>> result){
if(index== nums.length){
result.add(curResult);
return;
}
//不要当前元素
recur(nums,index+1,curResult,result);
//要当前元素
List<Integer> temp=new ArrayList<>(curResult);
temp.add(nums[index]);
recur(nums,index+1,temp,result);
}
}class Solution {
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> result=new ArrayList<>();
if(nums== null){
return result;
}
//需要求出个数为nums.length的bit数能够组成的二进制数的个数
int power=(int)Math.pow(2,nums.length);
for(int i=0;i<power;i++){
List<Integer> curResult=new ArrayList<>();
//j代表右移的位数
for(int j=0;j<nums.length;j++){
if(((i>>>j)&1)==1){
curResult.add(nums[j]);
}
}
result.add(curResult);
}
return result;
}
}