leetcode 78. 子集

题目

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

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

分析

  • 使用回溯法,递归求解,在循环中套用递归,递归中也就含有循环。

  • 创建一个result结果集合,和一个临时存放的temp集合,dfs函数得到result集合的最后结果。

  • helper函数:先将temp集合内容添加到result集合中,然后进入循环,依次将nums数组中的数字添加到temp集合中,即temp.add(nums[i]),之后递归再次添加时添加为当前索引+1的数字即添加nums[i+1],直到当前递归结束也就是i<nums.length,返回上层删除最新加入到temp中的数字,即temp.remove(temp.size()-1) 。

  • 也就是循环将nums数组的数字加入到temp中,递归循环,删除添加的数字。

class Solution {
    public static List<List<Integer>> subsets(int[] nums) {
        List<List<Integer>> res = new ArrayList<>();
        if (nums == null || nums.length == 0) return res;
        helper(res, new ArrayList<>(), nums, 0);
        return res;
    }
    public static void helper(List<List<Integer>> res, List<Integer> list, int[] nums, int index) {
        res.add(new ArrayList<>(list));
        for (int i = index; i < nums.length; i++) {
            list.add(nums[i]);
            helper(res, list, nums, i + 1);
            list.remove(list.size() - 1);
        }
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • <center>#1 Two Sum</center> link Description:Given an arr...
    铛铛铛clark阅读 6,632评论 0 3
  • 排序算法几种分类方式: 1,稳定排序和不稳定排序 如果a==b, 当排序之前a在b的前面,排序后,a仍然在b...
    fly_ever阅读 3,184评论 0 0
  • 78. 子集给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子...
    杏仁小核桃阅读 1,841评论 0 0
  • 题目描述: 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的...
    _溯光阅读 1,621评论 0 0
  • 动态规划 111. 爬楼梯思路类似斐波那契数列注意考虑第 0 阶的特殊情况 272. 爬楼梯 II思路类似上题,只...
    6默默Welsh阅读 7,174评论 0 1

友情链接更多精彩内容