78
Code:
public List<List<Integer>> subsets(int[] nums) { List<List<Integer>> res = new ArrayList<>(); // 分别生成长度为0, 1, 2, 3的子数组 for (int i = 0; i <= nums.length; i++){ subsetsSub(res, new ArrayList<>(), 0, i, nums); } return res; } // 输入 结果二维数组 存储中间结果的一维数组 检查的开始 输出的总长度 原数组 private void subsetsSub(List<List<Integer>> res, List<Integer> temp, int start, int length, int[] nums){ while (length == 0) { res.add(new ArrayList<>(temp)); return; } // 开始产生子list for (int j = start; j < nums.length; j++){ temp.add(nums[j]); subsetsSub(res, temp, j+1, length-1, nums); temp.remove(temp.size()-1); } }