Subsets

##题目

####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],
  []
]

##解题思路
该题用到的还是N-Queens中的方法:用一个循环递归处理子问题。Combinations这题是考虑集合长度K固定的情况,而该题中集合长度K是不固定的,是从0S.length(),所以可以将Combinations这题作为该题的子程序,由于题目中要求结果集合中元素应该是有序的,所以开始的时候先将S进行排序。

##算法代码
代码采用JAVA实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class Solution {
public ArrayList<ArrayList<Integer>> subsets(int[] S) {
ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
if(S==null || S.length==0)
return res;
Arrays.sort(S);
res.add(new ArrayList<Integer>());
for(int i=1;i<=S.length;i++)
{
helper(S,i,0,new ArrayList<Integer>(), res);
}
return res;
}

private void helper(int[] S, int k, int start, ArrayList<Integer> item, ArrayList<ArrayList<Integer>> res)
{

if(item.size()==k)
{
res.add(new ArrayList<Integer>(item));
return;
}
for(int i=start;i<S.length;i++)
{
item.add(S[i]);
helper(S,k,i+1,item,res);
item.remove(item.size()-1);
}
}
}

Comments