public class Solution {
public List<List<Integer>> subsets(int[] S) {
List<List<Integer>> result = new ArrayList<>();
List<Integer> path = new ArrayList<>();
Arrays.sort(S);
subsetsHelper(S, result, path, 0);
return result;
}
private void subsetsHelper(int[] S, List<List<Integer>> result, List<Integer> path, int index){
if(index == S.length){
List<Integer> l = new ArrayList(path);
result.add(l);
return;
}
subsetsHelper(S, result, path, index+1);
path.add(S[index]);
subsetsHelper(S, result, path, index+1);
path.remove(path.size()-1);
}
}
解析:题目给了所有不同的数字,求所有数字的所有可能子集。这样就要一层一层地一边走所有的可能一边记录。深搜
Given a set of distinct integers, S, return all possible subsets.
Note:
- Elements in a subset must be in non-descending order.
- The solution set must not contain duplicate subsets.
For example,
If S = [1,2,3]
, a solution is:
[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]