题目原型:
Given a set of distinct integers, S, return all possible subsets.
Note:
For example,
If S = [1,2,3], a solution is:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
基本思路:
先对数组进行排序,利用递归,总体分为两步(以1、2为例),假设我们已经求出了2的subset,为:[]、2。那么求1、2的subset时:
1、把2的subset加进来[],2
2、把1加到2的subset的第一个位置
public ArrayList<ArrayList<Integer>> subsets(int[] S)
{
ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
if(S==null||S.length==0)
return list;
Arrays.sort(S);
return getSubsets(S, 0);
}
public ArrayList<ArrayList<Integer>> getSubsets(int[] S , int index)
{
ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
if(index==S.length-1)
{
ArrayList<Integer> num = new ArrayList<Integer>();
num.add(S[index]);
list.add(num);
list.add(new ArrayList<Integer>());
return list;
}
else
{
ArrayList<ArrayList<Integer>> tmp = getSubsets(S, index+1);
ArrayList<Integer> tmpnum ;
for(int i = 0;i<tmp.size();i++)
{
list.add(tmp.get(i));
}
for(int i = 0;i<tmp.size();i++)
{
tmpnum = new ArrayList<Integer>(tmp.get(i));
tmpnum.add(0, S[index]);
list.add(tmpnum);
}
return list;
}
}
原文:http://blog.csdn.net/cow__sky/article/details/21938077