描述
现在有一个没有重复元素的整数集合S,求S的所有子集
注意:
你给出的子集中的元素必须按升序排列
给出的解集中不能出现重复的元素
示例1
输入:
[1,2,3]
复制返回值:
[[],[1],[2],[3],[1,2],[1,3],[2,3],[1,2,3]]
选择第i个元素:此时组合结果为=原来的组合 U 原来每一个组合加上元素i 的组合, U表示并集 。
import java.util.*;
public class Solution {
ArrayList<Integer> subResult = new ArrayList();
public ArrayList<ArrayList<Integer>> subsets(int[] S) {
// 升序排列
Arrays.sort(S);
ArrayList<ArrayList<Integer>> result = new ArrayList();
ArrayList<Integer> subResult = new ArrayList();
// 一个都不选择
result.add(subResult);
for(int i = 0 ; i< S.length; i++){
// 选择S[i]时,才会增加状态 原先的SubResult 每个增加一个S[i];
ArrayList<ArrayList<Integer>> newResult = new ArrayList();
for(ArrayList<Integer> lastSubResult : result){
ArrayList<Integer> newSubResult = new ArrayList();
newSubResult.addAll(lastSubResult);
newSubResult.add(S[i]);
newResult.add(newSubResult);
}
result.addAll(newResult);
}
return result;
}
}