/* * 78. Subsets * 2015.12.16 by Mingyang * 注意这里虽然感觉很像combine,但是这个array可以随意的,可以为任意数的array,所以还是得用array来 * 并且那个array要sort一下,记住,千万不要忘了加空集 * 1.长度标准:从空集,到本身长度的集合 * 2.可选的范围:从start开始到最后一个 * 3.往前走一步:item加一个,然后start加1表示从下一位加起,然后count也减一个 * 4.后退一步:不用,因为传进去是string,不会对当前状态进行影响 * 5.特别的case:count小于等于0 * 6.关于重复:无 */ public static List<List<Integer>> subsets(int[] nums) { List<List<Integer>> res = new ArrayList<List<Integer>>(); ArrayList<Integer> item = new ArrayList<Integer>(); Arrays.sort(nums); for (int len = 1; len <= nums.length; len++) dfs3(nums, 0, len, item, res); res.add(new ArrayList<Integer>()); return res; } public static void dfs3(int[] S, int start, int len, List<Integer> item,List<List<Integer>> res) { if (item.size() == len) { res.add(new ArrayList<Integer>(item)); return; } for (int i = start; i < S.length; i++) { item.add(S[i]); dfs3(S, i + 1, len, item, res); item.remove(item.size() - 1); } }