代码随想录算法训练营第28天 93.复原IP地址 78.子集 90.子集II

该代码示例展示了如何使用Java实现回溯算法来生成一个整数数组的所有子集。首先检查输入数组是否为空,然后通过递归调用backtrack函数,将每个中间子集添加到结果列表,并在每次递归返回时撤销上一步操作,以生成所有可能的组合。
摘要由CSDN通过智能技术生成

 78.子集 

class Solution {
    public List<List<Integer>> subsets(int[] nums) {
        // 创建一个用于存储所有子集的结果列表
        List<List<Integer>> result = new ArrayList<>();

        // 检查输入数组是否为空 如果为空 则直接返回结果列表
        if(nums == null || nums.length == 0){
            return result;
        }

        //调用回溯函数 从数组的第一个元素开始
        backtrack(result, new ArrayList<>(), nums,0);
        return result;
    }

    private void backtrack(List<List<Integer>> result, List<Integer> tempList, int[] nums, int start){
        // 将当前的子集添加到结果列表中
        result.add(new ArrayList<>(tempList));
        // 遍历数组的所有元素
        for(int i = start; i< nums.length;i++){
            // 将当前元素添加到子集中
            tempList.add(nums[i]);

            // 调用回溯函数 从下一个元素开始
            backtrack   (result, tempList, nums, i+1);

            // 在回到这一层的递归后 撤销上一步的操作
            tempList.remove(tempList.size()-1);
        }
    }
}

首先会检查输入的数组是否为空,如果为空则直接返回一个空的结果集。然后,它会使用回溯方法(backtrack)来生成所有可能的子集。在每一次递归调用中,它都会将当前的临时列表(tempList)添加到结果集中,然后尝试将当前元素添加到临时列表中,并进入下一层递归。在回到这一层递归后,它会撤销上一步的操作(即将当前元素从临时列表中移除),以便在下一次循环中尝试不添加当前元素。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值