代码随想录算法训练营day26|39. 组合总和、40. 组合总和||、8.分割回文串

39. 组合总和

由题意可知,数组中的每一个数都可以重复相加,因此我们在绘制树形图的时候,每次取完某一个数,下一次回溯的时候还可以用该数,比如2、3、6,每次取完2,候选还剩2、3、6。而最后答案也确实是2、2,所以2每次取完不能排除。
另外对于存储满足条件结果的path,每次从纵向的回溯过程出来之后,要将这一层回溯加进去的值减掉给横向的循环的下一个值腾出空间,一边进入下一个值的回溯。同时要给一个sum的值记录和。
在这里插入图片描述

class Solution {
    List<List<Integer>> res = new ArrayList<List<Integer>>();
    ArrayList<Integer> path = new ArrayList<Integer>();
    public List<List<Integer>> combinationSum(int[] candidates, int target) {
        if(candidates.length == 0 || candidates == null) return res;
        backTracking(candidates,target,0,0);
        return res;
    }
    public void backTracking(int[] candidates, int target,int sum,int startIndex){
        if(sum > target) return;
        if(sum == target) res.add(new ArrayList<Integer>(path));
        //循环
        for(int i = startIndex;i < candidates.length;i++){
            sum += candidates[i];
            path.add(candidates[i]);
            backTracking(candidates,target,sum,i);
            sum -= candidates[i];
            path.remove(path.size()-1);
        }
    }
}

40. 组合总和||

我觉得这道题目卡个2讲的已经够好了,多看几遍理解透彻就行。主要就是需要对candidates进行排序,然后理解去重的条件为什么是:

      if (i > 0 && candidates[i] == candidates[i - 1] && !used[i - 1]) {
        continue;
      }

最后的代码是:
其中:used是用来记录该位置的candidates的值是否被用过

class Solution {
    List<List<Integer>> res = new ArrayList<List<Integer>>();
    ArrayList<Integer> path = new ArrayList<Integer>();
    int sum = 0;
    boolean[] used;
    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 res;
    }
    public void backTracking(int[] candidates, int target,int startIndex){
        if(sum == target) res.add(new ArrayList<Integer>(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;
                }
            sum += candidates[i];
            used[i] = true;
            path.add(candidates[i]);
            backTracking(candidates,target,i+1);
            sum -= candidates[i];
            used[i] = false;
            path.remove(path.size()-1);
        }
    }
}

8.分割回文串

class Solution {
     List<List<String>> res = new ArrayList<List<String>>();
    ArrayList<String> path = new ArrayList<String>();
    public List<List<String>> partition(String s) {
        backTracking(s,0);
        return res;
    }
    public void backTracking(String s,int startIndex){
        //如果起始值到达字符串末尾,结束递归
        if(startIndex >= s.length()){
            res.add(new ArrayList<>(path));
            return;
        }
        for (int i = startIndex; i < s.length(); i++) {
            if(judgeHuiWen(s,startIndex,i)){
                path.add(s.substring(startIndex,i+1));
            }else{
                continue;//有一个子字符串不是回文字符串就没有必要进行回溯了
            }
            //如果现层的子字符串为回文的,继续回溯
            backTracking(s,i+1);//i往下一位,继续回溯
            //回溯
            path.remove(path.size()-1);
        }

    }
    public boolean judgeHuiWen(String s,int startIndex,int endIndex){
        while(startIndex <= endIndex){
            if(s.charAt(startIndex) != s.charAt(endIndex)) return false;
            startIndex++;
            endIndex--;
        }
        return true;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/726300.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

关于面试被面试官暴怼:“几年研究生白读” 的前因后果

中午一个网友来信说自己和面试官干起来了,看完他的描述真是苦笑不得,这年头是怎么了,最近互联网CS消息满天飞,怎么连面试官都SB起来了呢? 大概是这样的:这位网友面试时被问及了Serializable接口的底层实现原理,因为这是一个标识性的空接口,大部分同学在学习时都秉持着会…

我工作中用Redis的10种场景

Redis作为一种优秀的基于key/value的缓存&#xff0c;有非常不错的性能和稳定性&#xff0c;无论是在工作中&#xff0c;还是面试中&#xff0c;都经常会出现。 今天这篇文章就跟大家一起聊聊&#xff0c;我在实际工作中使用Redis的10种场景&#xff0c;希望对你会有所帮助。 …

南开大学漏洞报送证书

获取来源&#xff1a;edusrc&#xff08;教育漏洞报告平台&#xff09; url&#xff1a;教育漏洞报告平台(EDUSRC) 兑换价格&#xff1a;30金币​ 获取条件&#xff1a;南开大学任意中危或以上级别漏洞 证书规格&#xff1a;证书做了木框装裱&#xff0c;显得很高级

npm ERR! node-sass@6.0.1 postinstall: `node scripts/build.js`

问题 在vue项目安装组件时&#xff0c;npm install&#xff0c;出现的问题 npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! node-sass6.0.1 postinstall: node scripts/build.js npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the node-sass6.0.1 postinstall s…

微信小程序使用方法

一.在网页注册小程序账号&#xff08;在未注册的情况下&#xff09; 1.如果你还没有微信公众平台的账号&#xff0c;请先进入微信公众平台首页&#xff0c;点击 “立即注册” 按钮进行注册。我们选择 “小程序” 即可。 接着填写账号信息&#xff0c;需要注意的是&#xff0c;…

Jenkins 发测试邮件报错 553 Mail from must equal authorized user

Jenkins 发测试邮件报错 553 Mail from must equal authorized user 报错信息报错原因解决办法 报错信息 org.eclipse.angus.mail.smtp.SMTPSenderFailedException: 553 Mail from must equal authorized user at org.eclipse.angus.mail.smtp.SMTPTransport.mailFrom(SMTPTra…

智慧校园综合管理系统:打造高效智慧的学校管理平台

智慧校园综合管理系统&#xff0c;作为提升教育管理与教学效率的数字化解决方案&#xff0c;它将信息技术深度融合于校园的每一个角落&#xff0c;构建了一个集信息共享、教学资源优化、智能管理、安全保障于一体的综合平台。该系统不仅提供了统一的信息门户&#xff0c;确保学…

springBoot高校宿舍交电费系统-计算机毕业设计源码031552

摘 要 科技进步的飞速发展引起人们日常生活的巨大变化&#xff0c;电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流&#xff0c;人类发展的历史正进入一个新时代。在现实运用中&#xff0c;应用软件的工作…

IPython大师课:提升数据科学工作效率的终极工具

IPython是一个增强的Python交互式shell&#xff0c;它提供了丰富的功能和易用性改进&#xff0c;特别适合进行数据分析、科学计算和一般的Python开发。本文将全面介绍IPython的基本概念、使用方法、主要作用以及注意事项。 一、IPython简介 1. IPython的起源 IPython最初由Fe…

基于GWO-CNN-LSTM数据时间序列预测(多输入单输出)-多维时间序列模型-MATLAB实现

基于GWO-CNN-LSTM数据时间序列预测(多输入单输出)-多维时间序列模型-MATLAB实现 基于灰狼优化&#xff08;Grey Wolf Optimizer, GWO&#xff09;、卷积神经网络&#xff08;Convolutional Neural Network, CNN&#xff09;和长短期记忆网络&#xff08;Long Short-Term Memor…

【CT】LeetCode手撕—160. 相交链表

目录 题目1- 思路2- 实现⭐160. 相交链表——题解思路 3- ACM 实现 题目 原题连接&#xff1a;160. 相交链表 1- 思路 模式识别&#xff1a;相交链表 ——> 判断是否相交 思路 保证 headA 是最长的那个链表&#xff0c;之后对其开始依次遍历 2- 实现 ⭐160. 相交链表—…

Qt底层原理:深入解析QWidget的绘制技术细节(1)

在Qt5中&#xff0c;QWidget的绘制流程比较分散&#xff0c;网上介绍的文章也很少&#xff0c;因此写一篇文章总结记录一下这部分的知识点。 笔者使用的是Qt5.15.2的源码。 基本的绘制流程&#xff1a;从update到合成 更新请求&#xff08;Invalidate&#xff09;: 当一个QWidg…

从设计到实践:高速公路监控技术架构全剖析

随着高速公路网络的迅速扩展和交通流量的日益增加&#xff0c;高效的监控系统成为保障交通安全、提升管理效率的重要手段。本文将深入探讨高速公路监控技术架构&#xff0c;从设计理念到实际应用&#xff0c;全面解析这一关键技术的各个环节。 ### 一、系统设计理念 #### 1. 高…

岁月长河中的温柔等待

在那个年代&#xff0c;爱情往往像是一条静静流淌的小河&#xff0c;不动声色却又波澜不惊。在一个小村庄里&#xff0c;住着一对中年夫妻&#xff0c;人们叫他们李大叔和赵阿姨。他们的故事&#xff0c;就像是那个时代的缩影&#xff0c;承载着岁月的沧桑与深情的守候。 李大…

PyCharm新手入门

前言 在之前《Python集成开发工具的选择》一文中介绍了python初学者可以使用Jupyter Notebook&#xff0c;Jupyter Notebook简单易用&#xff0c;可以用来练习代码编写&#xff0c;但是实际生产开发环境使用这个工具是远远不够用的&#xff0c;因为实际软件开发中需要软件调试…

大数据数据挖掘系统可视化设计艺术

1.系统背景 在我们实际进行数据挖掘研发过程中&#xff0c;为了验证某些算法在业务中的性能每次都需要去从头写代码&#xff0c;如果我们将我们研发的算法以模块化的思想封装起来&#xff0c;下次再使用的时候直接在系统中进行拖拉一下生成一个工作流&#xff0c;就能完成数据挖…

Hive数据锁问题处理

在测试环境有定时任务会定期将flume采集的数据load到hive表中&#xff0c;在查看yarn application过程中发现load操作没有执行&#xff0c;且后续的任务在上一个任务执行结束后很久才开始。感觉像是阻塞一样&#xff0c;于是手动执行相关脚本&#xff0c;发现也是会卡住&#x…

无引擎游戏开发(3):数据结构设计|功能函数完善

为了简单起见&#xff0c;我们将棋盘的二维数组定义为全局变量。除此之外还要定义一个char类型的全局变量来识别当前的落子类型&#xff0c;我们将其初始化为‘O’。 char Board_data[3][3] {{-, -, -},{-, -, -},{-, -, -}, };char Cur_piece O; 现在回到“读取操作”部分…

Rancher注册已有k8s集群

Rancher安装后注册K8s集群操作 1.Rancher安装 编辑docker—compose文件 version: 3.8services:rancher:image: registry.cn-hangzhou.aliyuncs.com/rancher-images/rancher:v2.8.5container_name: rancherprivileged: truerestart: unless-stoppedports:- "18080:80&qu…

[创业之路-118] :制造业企业的必备管理神器-ERP-主要功能模块说明与系统架构

目录 一、ERP功能的标准化 二、常见的ERP标准化功能 2.1 基础档案 2.2 供应链 2.3 人力资源管理 2.4 资产管理 2.5 生产制造 2.6 财务会计 2.7 管理会计 2.8 CRM客户管理管理 2.9 商业智能分析 三、常见的ERP软件供应商 国内ERP软件供应商 国外ERP软件供应商 四…