import java.util.*; public class Solution { public ArrayList<ArrayList<Integer>> subsets(int[] S) { Arrays.sort(S) ; ArrayList<ArrayList<Integer>> res = new ArrayList<>() ; res.add(new ArrayList<Integer>()) ; for(int len = 1 ; len <= S.length ; len ++) {//长度,求出每一种按长度的所有情况 int resSize = res.size() ; for(int k = 0 ; k < resSize ; k ++) {//要求长度n的所有情况,先遍历拿到长度n-1的所有情况 ArrayList<Integer> list = res.get(k) ; if(list.size() == len - 1) { int start = list.size() == 0 ? Integer.MIN_VALUE : list.get(list.size() - 1) ; for(int i = 0 ; i < S.length ; i ++) {//在n-1的每一种情况后面,添加一位更大的数 if(S[i] <= start) continue ; ArrayList<Integer> new_list = new ArrayList(list) ; new_list.add(S[i]) ; res.add(new_list) ; } } } } return res ; } }