import java.util.*; public class Solution { public ArrayList<ArrayList<Integer>> subsets(int[] S) { if(S == null || S.length == 0) return new ArrayList<>() ; ArrayList<ArrayList<Integer>> res = new ArrayList<>() ; //dp[i]表示以 S[i-1]结尾的所有的 子集合 ArrayList<ArrayList<Integer>>[] dp = new ArrayList[S.length+1]; ArrayList<ArrayList<Integer>> aa0 = new ArrayList<>() ; ArrayList<Integer> a0 = new ArrayList<>() ; aa0.add(a0) ; dp[0] = aa0 ; res.addAll(dp[0]) ; for(int i = 1 ; i < dp.length ; i ++) { ArrayList<ArrayList<Integer>> cur = new ArrayList<>() ; for(int j = 0 ; j < i ; j ++) { ArrayList<ArrayList<Integer>> curj = dp[j] ; for(ArrayList<Integer> l : curj) { ArrayList<Integer> ll = new ArrayList(l) ; ll.add(S[i-1]) ; cur.add(ll) ; } } dp[i] = cur ; res.addAll(dp[i]) ; } Collections.sort(res , (l1 , l2)->{ if(l1.size() == l2.size()) { for(int i = 0 ; i < l1.size() ; i ++) { if(l1.get(i) != l2.get(i)) { return l1.get(i) - l2.get(i) ; } } return 0 ; } else { return l1.size() - l2.size() ; } }) ; return res ; } }