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);
    }
}

  

 

posted @ 2019-04-14 20:34  Doris7  阅读(148)  评论(0编辑  收藏  举报