// 1. 确定子集,首先要有开始位置,startIndex;返回值void // 2. 递归终结:存储每一个path,然后return即可 // 3. 单层逻辑:因为要返回子集,所以只要存储每一个path就好呀
import java.util.*; public class Solution { private ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>(); private LinkedList<Integer> path = new LinkedList<Integer>(); public ArrayList<ArrayList<Integer>> subsets(int[] S) { // 1. 确定子集,首先要有开始位置,startIndex;返回值void // 2. 递归终结:存储每一个path,然后return即可 // 3. 单层逻辑:因为要返回子集,所以只要存储每一个path就好呀 Arrays.sort(S); getSub(S, 0); res.sort(Comparator.comparingInt(ArrayList::size)); return res; } private void getSub(int[] S, int startIndex) { res.add(new ArrayList(path)); for (int i = startIndex; i < S.length; ++i) { path.add(S[i]); getSub(S, i + 1); path.removeLast(); } } }