子集DFS。注意:1. 层数是k还是k+1;2.Java中ArrayList的排序是Collections.sort(a)
import java.util.ArrayList; import java.util.Collections; public class Solution { public ArrayList<ArrayList<Integer>> subsets(int[] S) { // Start typing your Java solution below // DO NOT write main() function boolean[] status = new boolean[S.length]; ArrayList<ArrayList<Integer>> ans = new ArrayList<ArrayList<Integer>>(); dfs(S, status, 0, S.length, ans); return ans; } public void dfs(int[] S, boolean[] status, int k, int n, ArrayList<ArrayList<Integer>> arr) { if (k == n) { ArrayList<Integer> a = new ArrayList<Integer>(); for (int i = 0; i < n; i++) { if (status[i]) { a.add(S[i]); } } Collections.sort(a); arr.add(a); return; } else { status[k] = true; dfs(S, status, k+1, n, arr); status[k] = false; dfs(S, status, k+1, n, arr); } } }