智能解构:揭秘回溯法的魔力(39,40,131)

🤵‍♂️ 个人主页:@rain雨雨编程

😄微信公众号:rain雨雨编程

✍🏻作者简介:持续分享机器学习,爬虫,数据分析
🐋 希望大家多多支持,我们一起进步!
如果文章对你有帮助的话,
欢迎评论 💬点赞👍🏻 收藏 📂加关注+

力扣 难度
39. 组合总和 🟠
40. 组合总和 II 🟠
131. 分割回文串 🟠

目录

39. 组合总和

题目描述

思路步骤

代码实现

时间复杂度

空间复杂度

40. 组合总和 II

题目描述

思路步骤

代码实现

时间复杂度

空间复杂度

131. 分割回文串

题目描述

思路步骤

代码实现

时间复杂度

空间复杂度



题目描述

给定一个无重复元素的整数数组 candidates 和一个目标整数 target,任务是找出 candidates 中所有可以使数字和为 target 的不同组合,并以列表形式返回。需要注意的是,candidates 中的同一个数字可以无限制重复被选取,且如果至少一个数字的被选数量不同,则两种组合是不同的。对于给定的输入,保证和为 target 的不同组合数少于 150 个。

思路步骤

  1. 排序:首先对 candidates 数组进行排序,这样可以避免重复的组合,并且可以提前终止搜索。

  2. 回溯法:使用回溯法来找出所有可能的组合。回溯法是一种通过递归搜索所有可能情况的方法,当找到一个解时就将其添加到结果中,并在递归返回时撤销上一步操作。

  3. 终止条件:如果当前路径的和等于 target,则将当前路径添加到结果中。

  4. 剪枝:如果当前路径的和已经超过 target,则终止当前路径的搜索。

  5. 循环选择:从当前索引开始循环选择数字,如果加上当前数字后和不超过 target,则继续递归搜索,否则终止循环。

代码实现

import java.util.*;

class Solution {
    List<List<Integer>> res = new LinkedList<>();
    List<Integer> path = new LinkedList<>();

    public List<List<Integer>> combinationSum(int[] candidates, int target) {
        // 对候选数组进行排序
        Arrays.sort(candidates);
        // 从索引 0 开始回溯搜索
        backtracking(candidates, target, 0, 0);
        return res;
    }

    public void backtracking(int[] candidates, int targ
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值