subsets
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],
[]
]
[code]
public class Solution {
public List<List<Integer>> subsets(int[] S) {
List<List<Integer>> list=new ArrayList<List<Integer>>();
list.add(new ArrayList<Integer>());
if(S==null || S.length==0)return list;
Arrays.sort(S);
helper(S, 0, list);
return list;
}
void helper(int[]s, int index, List<List<Integer>> list)
{
if(index==s.length)return;
int n=list.size();
for(int i=0;i<n;i++)
{
List<Integer>temp=new ArrayList<Integer>(list.get(i));
temp.add(s[index]);
list.add(temp);
}
helper(s, index+1, list);
}
}
subsets II
with duplicates
[code]
public class Solution {
public List<List<Integer>> subsetsWithDup(int[] num) {
List<List<Integer>> list=new ArrayList<List<Integer>>();
list.add(new ArrayList<Integer>());
if(num==null || num.length==0)return list;
Arrays.sort(num);
helper(num, 0, list);
return list;
}
void helper(int[]num, int index, List<List<Integer>> list)
{
if(index==num.length)return;
int count=1;
index++;
while(index<num.length && num[index]==num[index-1])
{
count++;
index++;
}
int n=list.size();
for(int i=0;i<n;i++)
{
List<Integer> entry=new ArrayList<Integer>(list.get(i));
for(int j=1;j<=count;j++)
{
entry.add(num[index-1]);
list.add(new ArrayList<Integer>(entry));
}
}
helper(num, index, list);
}
}