Given a set of distinct integers, nums, return all possible subsets.
具体题目要求:点击打开链接
思路:例如数组[1,2,3]
1.先添加空new ArrayList;
([ ])
2.对于数组nums[0]=1,添加到刚才的空ArrayList里面,然后把当前结果添加到暂时的汇总ArrayList temp里面;
[ ]->[1],temp:[[1]],result:[[ ],[1]]
3.对于数组nums[1]=2,再继续;
[ ]->[2], [1]->[1,2],temp:[[2],[1,2]],result:[[ ],[1],[2],[1,2]]
4.对于数组nums[2]=3,再继续;
[ ]->[3], [1]->[1,3], [2]->[2,3], [1,2]->[1,2,3],temp:[[3],[1,3],[2,3],[1,2,3]],result:[[ ],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
public List<List<Integer>> subsets(int[] nums) {
Arrays.sort(nums);
List<List<Integer>> result = new ArrayList<>();
result.add(new ArrayList<>()); //添加空ArrayList
for (int num : nums) {
List<List<Integer>> temp = new ArrayList<>();
for (List<Integer> set : result) {
List<Integer> newSet = new ArrayList<>(set);
newSet.add(num);
temp.add(newSet);
}
result.addAll(temp);
}
return result;
}
回溯法
public ArrayList<ArrayList<Integer>> subsets(int[] num) {
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
if(num == null || num.length == 0) {
return result;
}
ArrayList<Integer> list = new ArrayList<Integer>();
Arrays.sort(num);
subsetsHelper(result, list, num, 0);
return result;
}
private void subsetsHelper(ArrayList<ArrayList<Integer>> result,
ArrayList<Integer> list, int[] num, int pos) {
result.add(new ArrayList<Integer>(list));
for (int i = pos; i < num.length; i++) {
list.add(num[i]);
subsetsHelper(result, list, num, i + 1);
list.remove(list.size() - 1);
}
}