[LeetCode] 78. 子集 ☆☆☆(回溯)

Posted 反光的小鱼儿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[LeetCode] 78. 子集 ☆☆☆(回溯)相关的知识,希望对你有一定的参考价值。

描述

给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。

说明:解集不能包含重复的子集。

示例:

输入: nums = [1,2,3]
输出:
[
[3],
  [1],
  [2],
  [1,2,3],
  [1,3],
  [2,3],
  [1,2],
  []
]

解析

和求字符串的全排序思路一样,回溯。只不过终结条件不一样。

代码

List<List<Integer>> list = new ArrayList<>();
    public List<List<Integer>> subsets(int[] nums) {
        if (null == nums || nums.length <= 0) {
            return list;
        }
        subsetsHelp(nums, new ArrayList<>(), 0);
        return list;
    }

    public void subsetsHelp(int[] nums, List<Integer> tempList, int startIndex) {
        if (startIndex <= nums.length) {
            list.add(new ArrayList<>(tempList));
        }
        for (int i = startIndex; i < nums.length; i++) {
            tempList.add(nums[i]);
            subsetsHelp(nums, tempList, i + 1);// 这里是i + 1,不是startIndex + 1。
            tempList.remove(tempList.size() - 1);
        }
    }

 

以上是关于[LeetCode] 78. 子集 ☆☆☆(回溯)的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode78:子集

leetcode 78子集

算法 ---- LeetCode回溯系列问题题解

算法 ---- LeetCode回溯系列问题题解

算法 ---- LeetCode回溯系列问题题解

算法 ---- LeetCode回溯系列问题题解