题目:
Given a set of distinct integers, nums, return all possible subsets.
Note: The solution set must not contain duplicate subsets.
For example,
If nums = [1,2,3]
, a solution is:
[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]
解决方法一:位图法 Runtime: 2 ms
public class Solution {
public List<List<Integer>> subsets(int[] nums) {
if(null==nums||nums.length<=0) return null;
List<List<Integer>> sets = new ArrayList<List<Integer>>();
for(int i=0;i<=Math.pow(2,nums.length)-1;i++){
List<Integer> subSet = new ArrayList<Integer>();
int bit=1;
for(int j=1;j<=nums.length;j++){
if((bit&i)!=0) subSet.add(nums[j-1]);
bit*=2;
}
sets.add(subSet);
}
return sets;
}
}
解决方法二: 回溯法 Runtime: 2 ms
public class Solution {
public List<List<Integer>> subsets(int[] nums) {
if(null==nums||nums.length<=0) return null;
List<List<Integer>> sets = new ArrayList<>();
backTrack(sets,new ArrayList<>(),nums,0);
return sets;
}
private void backTrack(List<List<Integer>> sets,List<Integer> subset, int[] nums, int start){
sets.add(new ArrayList(subset));
for(int i=start;i<nums.length;i++){
subset.add(nums[i]);
backTrack(sets,subset,nums,i+1);
subset.remove(subset.size()-1);
}
}
}
参考: