【力扣刷题总结之78. 子集】

相关标签


 一、题目要求

 二、题解和代码实现

1.题解

非官方题解,配合视频食用

2.代码实现

代码如下(示例):

class Solution {
   public List<List<Integer>> subsets(int[] nums) {
        int len = nums.length;
        if (len==0){
            return null;
        }

        List<List<Integer>> list = new ArrayList<>();//最终返回结果
        Deque<Integer> res = new ArrayDeque<Integer>();//创建栈
        subsetsDfs(nums,len,0,res,list);
        return list;
    }

    private void subsetsDfs(int[] nums, int len, int index, Deque<Integer> res, List<List<Integer>> list) {
        if (index==len){//当index == len 说明到最后一层的叶子结点,存储进list中
            list.add(new ArrayList<>(res));
            return;
        }

        subsetsDfs(nums,len,index+1,res,list);//这里是递归到下一层,但是不加这一层的num[index]进res
        
        res.addLast(nums[index]);//这里是添加这一层的num[index]进res
        subsetsDfs(nums, len, index+1, res, list);//这里是递归到下一层
        res.removeLast();//上面的递归结束后,说明已经到叶子结点过,然后就要回溯,删除刚刚添加的num[index]
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值