力扣:子集java

力扣:子集java

在这里插入图片描述

流程:

设置二维数组结果集和路径path
回溯三部曲
参数和返回值:返回值为空,参数为输入数组和开始下标
将path输入结果集-----因为如果放在结束条件之后会无法对最后叶子节点路径加如结果集
结束条件:开始下标大于等于输入数组nums的长度
单层递归逻辑
for循环(i=startindex;i<nums.length;i++)
节点操作:循环内将当前节点输入path
递归(nums,i+1)
回溯操作:当前节点弹出path

代码:

class Solution {
    List<List<Integer>> result = new ArrayList<>();//结果集
    LinkedList<Integer> path = new LinkedList<>();//当前路径
    public List<List<Integer>> subsets(int[] nums) {//主函数
        ziji(nums,0);//递归函数
        return result;
    }
    public void ziji(int[] nums,int startindex){//递归函数
        result.add(new ArrayList(path));//将路径输入结果集
        if(startindex>nums.length) return;//结束条件:开始下标大于输入数组的长度
        for(int i=startindex;i<nums.length;i++){//循环i设置为startindex,防止出现12和21为不同子集
            path.offer(nums[i]);//输入当前节点进入path
            ziji(nums,i+1);//递归下一层
            path.removeLast();//回溯。弹出当前节点
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值