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], [] ]
思路是,每次添加一个元素,就是在上一次的基础上,对每个列表加入元素,再与上一次的合并。
1 public class Solution { 2 public List<List<Integer>> subsets(int[] S) { 3 List<List<Integer>> lastList=new ArrayList<>(); 4 List<Integer> nonSet= new ArrayList<>(); 5 lastList.add(nonSet); 6 if (S==null || S.length==0) { 7 return lastList; 8 } 9 Arrays.sort(S); 10 11 for (int i = 0; i < S.length; i++) { 12 List<List<Integer>> tempList=new ArrayList<>(); 13 for (List<Integer> list : lastList) { 14 List<Integer> currlist=new ArrayList<>(); 15 currlist.addAll(list); 16 currlist.add(S[i]); 17 tempList.add(currlist); 18 } 19 lastList.addAll(tempList); 20 } 21 return lastList; 22 } 23 }