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 =
If S =
[1,2,3], a solution is:[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]Understand the problem:
As described in the problem, given a set of DISTINCT integers, S, return all possible subsets. Elements in a subset must be in non-descending order. The solution set must not contain duplicate subsets.
Recursive Solution:
public class Solution {
public ArrayList<ArrayList<Integer>> subsets(int[] S) {
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
if (S == null || S.length == 0) return result;
Arrays.sort(S);
result.add(new ArrayList<Integer>());
ArrayList<Integer> temp = new ArrayList<Integer>();
subsetsHelper(S, 0, result, temp);
return result;
}
private void subsetsHelper(int[] S, int start, ArrayList<ArrayList<Integer>> result, ArrayList<Integer> temp) {
if (start >= S.length) return;
for (int i = start; i < S.length; i++) {
temp.add(S[i]);
result.add(new ArrayList<Integer>(temp));
subsetsHelper(S, i + 1, result, temp);
temp.remove(temp.size() - 1);
}
}
}
No comments:
Post a Comment