代码随想录算法训练营第22天 | 组合总和 分割回文串

39. 组合总和

39. 组合总和 - 力扣(LeetCode)

题目链接/文章讲解:代码随想录

视频讲解:带你学透回溯算法-组合总和(对应「leetcode」力扣题目:39.组合总和)| 回溯法精讲!_哔哩哔哩_bilibili

自己乱写的,回溯的时候没有去掉重复使用的数字

class Solution {
    List<Integer> group = new ArrayList<>();
    List<List<Integer>> result = new ArrayList<>();
    int sum = 0;
    public void backTracking (int[] candidates,int target){
        if(sum == target){
            List<Integer> temp = new ArrayList(group);
            Collections.sort(temp);
            for(List<Integer> oneList:result){
                if(oneList.equals(temp)==true)return;
            }
            result.add(new ArrayList(temp));
            return;
        }else if(sum > target)return;
        for(int i = 0;i < candidates.length;i++){
            group.add(candidates[i]);
            sum += candidates[i];
            backTracking(candidates,target);
            group.remove(group.size() - 1);
            sum -= candidates[i];
        }
    }
    public List<List<Integer>> combinationSum(int[] candidates, int target) {
        backTracking(candidates,target);
        return result;
    }
}

没有剪枝

剪枝

修改

class Solution {
    List<Integer> group = new ArrayList<>();
    List<List<Integer>> result = new ArrayList<>();
    int sum = 0;
    public void backTracking (int[] candidates,int target,int startIndex){
        if(sum == target){
            result.add(new ArrayList(group));
            return;
        }
        for(int i = startIndex;i < candidates.length;i++){
            if(candidates[i] + sum > target)break;//排过序,现在已经超过target,说明后面的数已经不需要遍历了
            group.add(candidates[i]);
            sum += candidates[i];
            backTracking(candidates,target,i);
            group.remove(group.size() - 1);
            sum -= candidates[i];
        }
    }
    public List<List<Integer>> combinationSum(int[] candidates, int target) {
        Arrays.sort(candidates);//一定要先对数组排序,为了剪枝
        backTracking(candidates,target,0);
        return result;
    }
}

40.组合总和II

40. 组合总和 II - 力扣(LeetCode)

注意题目中给我们 集合是有重复元素的,那么求出来的 组合有可能重复,但题目要求不能有重复组合。

题目链接/文章讲解:代码随想录

视频讲解:​​​​​​回溯算法中的去重,树层去重树枝去重,你弄清楚了没?| LeetCode:40.组合总和II_哔哩哔哩_bilibili

class Solution {
    List<Integer> path = new ArrayList<>();
    List<List<Integer>> result = new ArrayList<>();
    public void backTracking(int[] candidates,int target,int startIndex,int sum,boolean[] used){
        if(sum == target){
            result.add(new ArrayList(path));
            return;
        }else if(sum > target)return;
        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] == false){//去重操作
                continue;
            }
            path.add(candidates[i]);
            sum += candidates[i];
            used[i] = true;
            backTracking(candidates,target,i + 1,sum,used);//下一层递归
            path.remove(path.size() - 1);//回溯
            sum -= candidates[i];
            used[i] = false;
        }
    }
    public List<List<Integer>> combinationSum2(int[] candidates, int target) {
        boolean[] used = new boolean[candidates.length];//记录元素是否被使用
        Arrays.sort(candidates);//必须排序
        backTracking(candidates,target,0,0,used);
        return result;
    }
}

131.分割回文串

131. 分割回文串 - 力扣(LeetCode)

本题较难,大家先看视频来理解 分割问题,明天还会有一道分割问题,先打打基础。

代码随想录

视频讲解:带你学透回溯算法-分割回文串(对应力扣题目:131.分割回文串)| 回溯法精讲!_哔哩哔哩_bilibili

class Solution {
    List<String> path = new ArrayList<>();
    List<List<String>> result = new ArrayList<>();
    public boolean huiwen(String s,int start,int end){
        while(start < end){
            if(s.charAt(start) != s.charAt(end))return false;
            start++;
            end--;
        }
        return true;
    }
    public void backTracking(String s,int startIndex){
        if(startIndex == s.length()){
            result.add(new ArrayList(path));
            return;
        }
        for(int i = startIndex;i < s.length();i++){
            if(huiwen(s,startIndex,i)){//左闭右闭区间
                path.add(s.substring(startIndex,i + 1));//已经切过的不能再切
            }else continue;
            backTracking(s,i + 1);
            path.remove(path.size()-1);
        }
    }
    public List<List<String>> partition(String s) {
        backTracking(s,0);
        return result;
    } 
}

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

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

相关文章

esp32 arduino开发常用函数(需要和乐鑫的arduino文档配合使用)

说明&#xff1a;1、由于写函数参数浪费时间并且没有说明只有参数意义不大&#xff0c;所以在此函数一般只以函数名出现。 2、esp32有两个核心&#xff0c;编号为0和1&#xff0c;如果启动了wifi和蓝牙&#xff0c;则会默认将wifi和蓝牙运行在编号为0的核心上。 3、esp32adc2…

《鸢尾花数学大系:从加减乘除到机器学习》开源资源

《鸢尾花数学大系&#xff1a;从加减乘除到机器学习》开源资源 Gitee&#xff1a;https://gitee.com/higkoo/ bilibili&#xff1a;https://space.bilibili.com/513194466 GitHub&#xff1a;https://github.com/Visualize-ML

Markdown HTML 图像语法

插入图片 Markdown ![图片描述](图片链接)一般来说&#xff0c;直接复制粘贴过来就行了&#xff0c;部分网页/应用可以拖拽&#xff0c;没人会真敲图片的链接吧…… 示例图片&#xff1a; ![Creeper?](https://i-blog.csdnimg.cn/direct/f5031c8c4f15421c9882d7eb23540b8…

deepseek在pycharm 中的配置和简单应用

对于最常用的调试python脚本开发环境pycharm&#xff0c;如何接入deepseek是我们窥探ai代码编写的第一步&#xff0c;熟悉起来总没坏处。 1、官网安装pycharm社区版&#xff08;免费&#xff09;&#xff0c;如果需要安装专业版&#xff0c;需要另外找破解码。 2、安装Ollama…

华为eNSP:配置单区域OSPF

一、什么是OSPF&#xff1f; OSPF&#xff08;Open Shortest Path First&#xff0c;开放最短路径优先&#xff09;是一种链路状态路由协议&#xff0c;属于内部网关协议&#xff08;IGP&#xff09;&#xff0c;主要用于在单一自治系统&#xff08;AS&#xff09;内部动态发现…

live555推流服务器异常

1.后端异常信息&#xff1a; MultiFramedRTPSink::afterGettingFrame1(): The input frame data was too large for our buffer size (100176). 48899 bytes of trailing data was dropped! Correct this by increasing "OutPacketBuffer::maxSize" to at least m…

ubuntu24.04-系统重装

1.下载系统并安装 参考 Ubuntu-24.04安装教程超详细(2024)_ubuntu24.04-CSDN博客 ubuntu.iso下载地址&#xff1a;https://cn.ubuntu.com/download/desktop 2.添加清华源 1.清华大学开源软件镜像站 | Tsinghua Open Source Mirror sudo passwd root #设置 root 密…

中原银行:从“小机+传统数据库”升级为“OceanBase+通用服务器”,30 +系统成功上线|OceanBase DB大咖说(十五)

OceanBase《DB 大咖说》第 15 期&#xff0c;我们邀请到了中原银行金融科技部数据团队负责人&#xff0c;吕春雷。本文为本期大咖说的精选。 吕春雷是一位资历深厚的数据库专家&#xff0c;从传统制造企业、IT企业、甲骨文公司到中原银行&#xff0c;他在数据库技术与运维管理…

性能测试监控工具jmeter+grafana

1、什么是性能测试监控体系&#xff1f; 为什么要有监控体系&#xff1f; 原因&#xff1a; 1、项目-日益复杂&#xff08;内部除了代码外&#xff0c;还有中间件&#xff0c;数据库&#xff09; 2、一个系统&#xff0c;背后可能有多个软/硬件组合支撑&#xff0c;影响性能的因…

第TR3周:Pytorch复现Transformer

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客 &#x1f356; 原作者&#xff1a;K同学啊 Transformer通过自注意力机制&#xff0c;改变了序列建模的方式&#xff0c;成为AI领域的基础架构 编码器&#xff1a;理解输入&#xff0c;提取上下文特征…

操作系统 2.7-CPU调度策略

什么是CPU调度 这张图展示了操作系统中多进程管理和CPU调度的基本概念。图中显示了三个不同的进程&#xff08;PID:1, PID:2, PID:3&#xff09;&#xff0c;它们各自处于不同的执行状态&#xff0c;并由操作系统的调度器&#xff08;Scheduler&#xff09;进行管理。 图中元素…

TypeError: Cannot assign to read only property ‘xxx‘ of object ‘#<Object>‘

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…

网络空间安全(16)旁注/跨库/CDN绕过

一、旁注 1. 定义 旁注是一种攻击技术&#xff0c;当黑客无法直接攻击目标网站时&#xff0c;会利用同一服务器上其他网站的安全漏洞&#xff0c;渗透进目标网站&#xff0c;从而获取其权限。这种攻击方式类似于“曲线救国”&#xff0c;通过迂回的方式达成目的。 2. 实现原理 …

ArcGIS操作:13 生成最小外接矩阵

应用情景&#xff1a;筛选出屋面是否能放下12*60m的长方形&#xff0c;作为起降场候选点&#xff08;一个不规则的形状内&#xff0c;判断是否能放下指定长宽的长方形&#xff09; 1、面积初步筛选 Area ≥ 720 ㎡ 面积计算见 2、打开 ArcToolbox → Data Management Tools …

3.6 登录认证

登录功能 登录思路 联调测试 登录校验 问题&#xff1a;在未登录情况下&#xff0c;我们也可以直接访问部门管理、员工管理等功能。 登录标记 用户登录成功之后&#xff0c;每一次请求中&#xff0c;都可以得到该标记。 统一拦截 过滤器Filter拦截器Interceptor 会话技术 会…

基于Spring Boot的校园失物招领系统的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

Unity光照之Halo组件

简介 Halo 组件 是一种用于在游戏中创建光晕效果的工具&#xff0c;主要用于模拟光源周围的发光区域&#xff08;如太阳、灯泡等&#xff09;或物体表面的光线反射扩散效果。 核心功能 1.光晕生成 Halo 组件会在光源或物体的周围生成一个圆形光晕&#xff0c;模拟光线在空气…

破解透明物体抓取难题,地瓜机器人CASIA 推出几何和语义融合的单目抓取方案|ICRA 2025

概述 近日&#xff0c;全球机器人领域顶会ICRA 2025&#xff08;IEEE机器人与自动化国际会议&#xff09;公布论文录用结果&#xff0c;地瓜机器人主导研发的DOSOD开放词汇目标检测算法与MODEST单目透明物体抓取算法成功入选。前者通过动态语义理解框架提升复杂场景识别准确率…

使用JMeter(组件详细介绍+使用方式及步骤)

JSON操作符 在我们使用请求时,经常会遇到JSON格式的请求体,所以在介绍组件之前我会将介绍部分操作符,在进行操作时是很重要的 Operator Description $ 表示根元素 当前元素 * 通配符,所有节点 .. 选择所有符合条件的节点 .name 子元素,name是子元素名称 [start:e…

AI编程工具-(六)

25030607 这两天依然是用通义灵码做数据分析建模&#xff0c;流程没有改进想法。阻塞感明显&#xff0c;需要更多的动脑了。 数据依然是之前的数据。时序数据B预测时序数据A。 准备工作1 问模型思路&#xff0c;但是我没想出新思路&#xff0c;所以没看出啥。 数据分析1 分…