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

武汉高端网站开发公司论文收录网站排名

武汉高端网站开发公司,论文收录网站排名,wordpress引用js,如何建网站卖东西回溯算法 Part02 组合总数 力扣题目链接 代码随想录链接 视频讲解 题目描述: 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你…

回溯算法 Part02

组合总数

力扣题目链接
代码随想录链接
视频讲解
题目描述: 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。

candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是不同的。

对于给定的输入,保证和为 target 的不同组合数少于 150 个。

在这里插入图片描述

思路,本题的解法和part01的组合总和3的思路差别不大,其解树如下:
在这里插入图片描述

唯一的区别在于本题目之中的元素是可以重复选取的,因此,在递归传递参数的时候,我们应该传递i而不是i+1;

回溯法

具体代码如下:

class Solution {int sum = 0;List<Integer> path = new ArrayList<>();List<List<Integer>> result = new ArrayList<>(); public List<List<Integer>> combinationSum(int[] candidates, int target) {backTracking(candidates,target,0);return result;}private void backTracking(int[] candidates , int target , int startIndex){// 剪枝操作if(sum > target) return ;if(startIndex > candidates.length) return ;// 满足条件的情况存储if(sum == target){result.add(new ArrayList<>(path));return ;}for(int i = startIndex ; i < candidates.length ; i++){sum += candidates[i];path.add(candidates[i]);// 递归backTracking(candidates,target,i);// 回溯sum -= candidates[i];path.removeLast();}}
}

组合总数2

力扣题目链接
代码随想录链接
视频讲解
题目描述: 给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。

candidates 中的每个数字在每个组合中只能使用 一次 。

注意:解集不能包含重复的组合。

在这里插入图片描述

思路:因为给的candidates 之中包含重复的元素,所以可能造成解集之中也包含同样的输出,但题目之中要求解集不能包含重复的组合。本题的解树为:
在这里插入图片描述

回溯法

思路:

class Solution {LinkedList<Integer> path = new LinkedList<>();List<List<Integer>> ans = new ArrayList<>();boolean[] used;int sum = 0;public List<List<Integer>> combinationSum2(int[] candidates, int target) {used = new boolean[candidates.length];// 加标志数组,用来辅助判断同层节点是否已经遍历Arrays.fill(used, false);// 为了将重复的数字都放到一起,所以先进行排序Arrays.sort(candidates);backTracking(candidates, target, 0);return ans;}private void backTracking(int[] candidates, int target, int startIndex) {// if(sum > target) return ;if (sum == target) {ans.add(new ArrayList(path));}for (int i = startIndex; i < candidates.length; i++) {if (sum + candidates[i] > target) {break;}// 出现重复节点,同层的第一个节点已经被访问过,所以直接跳过if (i > 0 && candidates[i] == candidates[i - 1] && !used[i - 1]) {continue;}used[i] = true;sum += candidates[i];path.add(candidates[i]);// 每个节点仅能选择一次,所以从下一位开始backTracking(candidates, target, i + 1);used[i] = false;sum -= candidates[i];path.removeLast();}}
}

回溯法(我的解决)

使用contains判断当前的结果path是否存在于result之中,不在则加入(会出现一些例子执行时间超出限制)

代码如下:

class Solution {int sum = 0 ;List<Integer> path = new ArrayList<>();List<List<Integer>> result = new ArrayList<>();public List<List<Integer>> combinationSum2(int[] candidates, int target) {Arrays.sort(candidates);backTracking(candidates,target,0);return result;}private void backTracking(int[] candidates , int target , int startIndex){if(sum > target) return ;if(sum == target && !result.contains(path)){result.add(new ArrayList<>(path));return ;}for(int i = startIndex ; i < candidates.length ; i++){sum += candidates[i];path.add(candidates[i]);backTracking(candidates,target,i + 1);sum -= candidates[i];path.remove(path.size() - 1);}}}

分割回文串 (待补充)

力扣题目链接
代码随想录链接
视频讲解
题目描述:

回溯法

代码如下:

class Solution {//保持前几题一贯的格式, initializationList<List<String>> res = new ArrayList<>();List<String> cur = new ArrayList<>();public List<List<String>> partition(String s) {backtracking(s, 0, new StringBuilder());return res;}private void backtracking(String s, int start, StringBuilder sb){//因为是起始位置一个一个加的,所以结束时start一定等于s.length,因为进入backtracking时一定末尾也是回文,所以cur是满足条件的if (start == s.length()){//注意创建一个新的copyres.add(new ArrayList<>(cur));return;}//像前两题一样从前往后搜索,如果发现回文,进入backtracking,起始位置后移一位,循环结束照例移除cur的末位for (int i = start; i < s.length(); i++){sb.append(s.charAt(i));if (check(sb)){cur.add(sb.toString());backtracking(s, i + 1, new StringBuilder());cur.remove(cur.size() -1 );}}}//helper method, 检查是否是回文private boolean check(StringBuilder sb){for (int i = 0; i < sb.length()/ 2; i++){if (sb.charAt(i) != sb.charAt(sb.length() - 1 - i)){return false;}}return true;}
}

http://www.dtcms.com/wzjs/282944.html

相关文章:

  • wordpress 萌主题网站建设优化400报价
  • 网站设计模板照片网站优化技巧
  • 直播网站模板免费网页制作平台
  • 平台类网站做多久南宁网
  • 网络营销案例实例优化防控举措
  • 高端营销网站定制简述常用的网络营销方法
  • 移动终端的网站百度竞价排名是什么
  • 做外贸服饰哪个个网站好百度指数官网登录
  • 做网站的收益在哪写软文平台
  • 武汉制作网站软件搜一搜排名点击软件
  • 昆明 网站建设自媒体人专用网站
  • 房地产网站案例seo的基础优化
  • 网站建设及推广费用百度外推排名
  • 俄罗斯网站制作seo管理系统
  • 网站全屏轮播怎么做重庆企业免费建站
  • 做电影网站怎么样快速的网站设计制作
  • 图片制作视频用什么软件廊坊关键词优化平台
  • 如何对网站做引擎优化5g网络优化培训
  • 合肥做网站专家疫情防控最新信息
  • 网页设计与网站建设...seo关键词如何设置
  • 北京设计网站建设360搜索优化
  • wordpress 点击 代码优化大师官方
  • 网站上传到虚拟服务器百度搜索引擎优化方式
  • 网站程序安装阿里云域名注册
  • 云网站系统企业网站seo优化外包
  • 莱州哪有做网站的小程序制作流程
  • 网站首页动画模板可以直接进入网站的正能量
  • 做网站绘制蓝图的步骤西安百度推广排名
  • 网站建设属于什么资产免费百度seo引流
  • 评测网站做的那些条形图四川seo推广公司