题目:
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);
}
}
}
参考:
本文详细介绍了两种生成整数集合所有可能子集的方法:位图法和回溯法,并提供了具体的Java实现代码。通过这两种方法可以有效地求解给定整数集合的所有不重复子集。
1297

被折叠的 条评论
为什么被折叠?



