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:
Solution: Non-Recursion method
NP-Problem again.
Complexity Time is base on the Number of Subsets result which is O(2^N)
Idea: Create result list from Nothing to something that means
generate element from empty set to some element sets by inserting element one by one.
Check detail in Coding below
public class Solution {
public ArrayList<ArrayList<Integer>> subsets(int[] S) {
ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
if(S.length==0) return res;
//Elements in a subset must be in non-descending order.
Arrays.sort(S);
ArrayList<Integer> list=new ArrayList<Integer>();
//Start from a empty list
res.add(list);
for(int i=0;i<S.length;i++){
int size=res.size();
for(int j=0;j<size;j++){
//generate from empty set to some element
// sets by inserting element one by one.
list=new ArrayList<Integer>(res.get(j));
list.add(S[i]);
res.add(list);
}
}
return res;
}
}