78. Subsets
Given a set of distinct integers, nums, return all possible subsets.
给定一组非重复数字,求出所有可能的子集
解析:
例如 [1,2,3],解法:
首先放[],然后往已有的[]中放1
1. 首先放1
此时已有[ [], 1 ]
2. 然后对[ [], 1 ] 放2
于是此时有 [ [], [1], [2], [1,2] ]
3. 然后对[ [], [1], [2], [1,2] ] 放3
此时[ [], [1], [2], [1,2], [3], [1,3], [2,3], [1,2,3] ] 求出解
算法
public class Solution {
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> result = new ArrayList<>();
result.add(new ArrayList<Integer>());
Arrays.sort(nums);
//算法思想:往当前已有的组合中添加
for (int i : nums) {
List<List<Integer>> tmp = new ArrayList<>();
for (List<Integer> a : result) {
List<Integer> sub = new ArrayList<>(a);
sub.add(i);
tmp.add(sub);
}
result.addAll(tmp);
}
return result;
}
}