利用递归的方法求子集
每层递归是不同的排列组合,因为前面的数已经排列组合过了,每次只需要从下一个数开始组合即可
class Solution {
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> ret = new ArrayList<>();
if (nums == null) {
return ret;
}
Arrays.sort(nums);
dfs(nums, 0, new ArrayList<Integer> (), ret);
return ret;
}
public void dfs(int[] S, int index, List<Integer> path, List<List<Integer>> ret) {
ret.add(new ArrayList<Integer>(path));
for (int i = index; i < S.length; i++) {
path.add(S[i]);
dfs(S, i + 1, path, ret);
path.remove(path.size() - 1);
}
}
}