当前位置: 首页 > wzjs >正文

聊城网站建设价格江苏建设管理信息网站

聊城网站建设价格,江苏建设管理信息网站,蘑菇街网站模板,开发一款软件题目描述 给定一个无重复元素的数组 candidates 和一个目标值 target,找出 candidates 中所有可以使数字和为 target 的组合。数组中的数字可以被重复使用。 示例: 输入: candidates [2,3,6,7], target 7 输出: [[2,2,3],[7]]代码解析 class Solut…

题目描述

给定一个无重复元素的数组 candidates 和一个目标值 target,找出 candidates 中所有可以使数字和为 target 的组合。数组中的数字可以被重复使用。

示例:

输入: candidates = [2,3,6,7], target = 7
输出: [[2,2,3],[7]]

代码解析

class Solution {// 记录当前的组合路径public List<Integer> path = new ArrayList<>();// 存储所有符合条件的组合结果public List<List<Integer>> ans = new ArrayList<>();public List<List<Integer>> combinationSum(int[] candidates, int target) {// 先排序,方便后续剪枝Arrays.sort(candidates);// 调用回溯函数,从索引0开始dfs(candidates, 0, target, 0);return ans;}public void dfs(int[] candidates, int sum, int target, int i) {// 当路径和等于目标值时,将当前路径加入结果集if (sum == target) {ans.add(new ArrayList<>(path));return;}// 遍历候选数组,从索引 i 开始,保证组合不重复for (int j = i; j < candidates.length; j++) {// 剪枝:如果当前元素加入后超过目标值,则终止循环if (sum + candidates[j] > target) {break;}// 选择当前元素sum += candidates[j];path.add(candidates[j]);// 递归调用,继续尝试选择当前元素(允许重复使用)dfs(candidates, sum, target, j);// 回溯:撤销当前选择,恢复 sum 和 path 状态path.remove(path.size() - 1);sum -= candidates[j];}}
}

代码详解

  1. 全局变量

    • path 用于存储当前的组合路径。

    • ans 用于存储所有满足条件的组合。

  2. 排序

    • Arrays.sort(candidates); 使数组有序,方便后续剪枝。

  3. 深度优先搜索(DFS)

    • sum 记录当前路径和。

    • i 控制遍历起点,确保组合不重复。

    • sum == target,将当前 path 加入 ans

    • 剪枝:若 sum + candidates[j] > target,提前终止循环。

    • 递归时,j 位置不变,允许重复使用当前数字。

    • 回溯时,撤销选择,保证 sum 还原。

复杂度分析

  • 时间复杂度:最坏情况下,递归树的深度为 target/min(candidates),每层最多 n 个分支,时间复杂度约为 O(n^k)

  • 空间复杂度O(k)k 为递归深度。

优化

  1. 剪枝:提前排序并在 sum + candidates[j] > target 时终止循环。

  2. 回溯优化sum 变量直接参与递归,减少重复计算。

注意

下面是一些需要特别留意的地方:

  1. 排序与剪枝:
    排序操作有助于剪枝,因为排序后如果当前路径和 sum 加上某个候选数超过了 target,可以直接终止循环,避免不必要的计算。这种优化能显著提高效率。

  2. 重复元素问题:
    虽然题目给定的是“无重复元素的数组”,但我们仍然要小心避免不同的组合产生重复结果。在回溯中通过从当前位置 i 开始递归,可以确保每个组合只出现一次。

  3. 回溯时的恢复:
    在回溯过程中,每次选择一个数字后都要撤销该选择(即 path.removesum -= candidates[j])。这一步是保证回溯算法能够正常工作的关键,因为它允许探索所有可能的路径。


文章转载自:

http://onjWozzS.fpzpb.cn
http://LAnV3QTJ.fpzpb.cn
http://jDDFFWaF.fpzpb.cn
http://qp22V8oY.fpzpb.cn
http://c7FQKPTz.fpzpb.cn
http://MZcWROWl.fpzpb.cn
http://o2erFJRb.fpzpb.cn
http://6dyhO2YO.fpzpb.cn
http://ZBUz1vvC.fpzpb.cn
http://8vsikkEw.fpzpb.cn
http://PGXlU1IK.fpzpb.cn
http://fHgu6Olz.fpzpb.cn
http://FT80LXZH.fpzpb.cn
http://9EGKPLvB.fpzpb.cn
http://BCIiLb1I.fpzpb.cn
http://oAllCjH3.fpzpb.cn
http://CTwJsWIh.fpzpb.cn
http://4iHf64ec.fpzpb.cn
http://yBWDAeXR.fpzpb.cn
http://SnrJhEJH.fpzpb.cn
http://jZCD9kqa.fpzpb.cn
http://az6chPgt.fpzpb.cn
http://laerOvLs.fpzpb.cn
http://9kBg79aT.fpzpb.cn
http://3oQF5nap.fpzpb.cn
http://m0rp3ZCm.fpzpb.cn
http://Fsyx9gcW.fpzpb.cn
http://9jIfSfWd.fpzpb.cn
http://0iKiAfmF.fpzpb.cn
http://Iv6AR1ok.fpzpb.cn
http://www.dtcms.com/wzjs/760618.html

相关文章:

  • 苏州做网站公司速找苏州聚尚网络wordpress 客户端管理
  • 厦门哪里有做网站官方网站建设项目询价
  • 网站后台下载海尔网站建设内容策划
  • 学习php做毕设网站方向合肥网站建设培训班
  • 彩票做的最好是个网站好成品app直播源码有什么用
  • 南山商城网站建设哪家技术好东莞优化排名推广
  • 福州高端网站建设服务网络公司wordpress板娘插件
  • 中国古风网站模板海外 国内网站建设
  • 设计公司啊 网站移动做绩效的网站
  • 用jsp做网站步骤做网站公司不给源代码
  • 做微信文章的网站服装如何做微商城网站建设
  • 梅州公司做网站wordpress单屏模板
  • 建站平台企业排名3合1网站建设哪家好
  • 南京博物馆网站哪家做的免费制作主图的网站
  • 各种网站开发工具世界建筑设计公司排名
  • 菏泽做网站推广郑州高端网站建设
  • 网站建设服务器软件内网门户网站建设要求
  • 备案网站地址o2o电子商务模式
  • h5页面制作网站华为云建站视频教程
  • 成都哪里做网站好网站设置地图
  • 教育培训机构怎么建设网站2k屏幕的网站怎么做
  • 怎么把自己电脑建设网站优质视频素材网站
  • wordpress 选择用户东莞网站建设白帽seo
  • 网站开发有前景吗广州冼村地铁站几号线
  • 网站发布平台做化工类网站内容
  • 可以做软文推广的网站专业开发网站建设
  • 做网站的产品图片做h5网站
  • 前台网站开发技术seo搜索引擎优化是利用
  • 做一个网站需要多少钱 怎么做seo如何优化网站步骤
  • 魔力百科网站做料理视频汕头网站关键词优化教程