【代码随想录训练营】【Day 29】【回溯-3】| Leetcode 39, 41, 131

news2024/11/15 12:16:06

【代码随想录训练营】【Day 29】【回溯-3】| Leetcode 39, 41, 131

需强化知识点

  • startInex作用:一是处理是否可以有重复值,二是实现纵向遍历(不能没有)
  • 去重要在数组有序的前提下进行
  • 分割问题

题目

39. 组合总和

  • 注意不要在for循环中乱用return,写到终止条件上,for循环中应该用break
class Solution:
    def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:
        result = []

        def backtracking(candidates, target, start_index, path_sum, path, result):
            if path_sum > target:
                    return
            if path_sum == target:
                result.append(path[:])
                return
            
            for i in range(start_index, len(candidates)):
                path_sum += candidates[i]
                path.append(candidates[i])
                backtracking(candidates, target, i, path_sum, path, result)
                path.pop()
                path_sum -= candidates[i]
        candidates.sort()
        backtracking(candidates, target, 0, 0, [], result)        
        return result

40. 组合总和 II

  • 去重:可以使用used数组,此处应该是同层不能取重复的数,used[i-1] == False,是会重复的情况
    • 使用startIndex去重, i > startIndex,代表是在同层的情况,在进行横向遍历
class Solution:
    def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:

        def backtracking(result, path, target, total, candidates, startIndex):
            if total == target:
                result.append(path[:])
                return
            
            for i in range(startIndex, len(candidates)):
                if total + candidates[i] > target:
                    break
                if i > startIndex and candidates[i] == candidates[i-1]:
                    continue
                total += candidates[i]
                path.append(candidates[i])
                backtracking(result, path, target, total, candidates, i+1)
                total -= candidates[i]
                path.pop()
        result = []
        candidates.sort()
        backtracking(result, [], target, 0, candidates, 0)
        return result

131. 分割回文串

  • 代码随想录思路:递归用来纵向遍历,for循环用来横向遍历,切割线(就是图中的红线)切割到字符串的结尾位置,说明找到了一个切割方法。
  • 再次注意,for循环内不要乱用return(此处应该为continue),继续下一种切割方案
    在这里插入图片描述
class Solution:
    def partition(self, s: str) -> List[List[str]]:
        def isPalindrome(s):
            if len(s) == 1:
                return True
            left, right = 0, len(s)-1
            while left < right:
                if s[left] != s[right]:
                    return False
                left += 1
                right -= 1
            return True

        def backtracking(s, path, result, startIndex):
            if startIndex == len(s):
                result.append(path[:])

            for i in range(startIndex, len(s)):
                select = s[startIndex:i+1]
                if not isPalindrome(select):
                    continue
                path.append(select)
                backtracking(s, path, result, i+1)
                path.pop()
        
        result = []
        backtracking(s, [], result, 0)
        return result        

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Comfyui工作流报错:Image scale to side 报错,安装了Derfuu-Nodes仍然没法运行

&#x1f386;问题描述 最近很多朋友在玩comfyui的时候&#xff0c;发现有个图像缩放的节点用不了了&#xff0c;同时报错&#xff1a; When loading the graph, the following node types were not found: Image scale to side Nodes that have failed to load will show as…

数据结构之栈和队列(超详解

目录 一.栈 1.栈的基本概念 2.栈的基本操作 3.栈的储存结构 ①栈的顺序储存 (1)基本概念 (2)代码实现 ②栈的链式储存 (1)基本概念 (2)代码实现 二.队列 1.队列的基本概念 2.队列的基本操作 3.队列的储存结构 ①队列的链式储存 (1)基本概念 ​编辑 (2)代码实现 ②…

C++进阶之路:何为拷贝构造函数,深入理解浅拷贝与深拷贝(类与对象_中篇)

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

Java的线程的使用

一.两种创建线程的方式 1.继承Thread类&#xff08;匿名内部类&#xff09; 创建方式&#xff1a; 1.定义一个子类继承Thread&#xff0c;重写run方法 2.创建子类对象&#xff0c; 3.调用子类对象的start方法&#xff08;启动还是执行的run方法&#xff09; 优缺点&#x…

小猪APP分发:一站式免费应用推广解决方案

在竞争激烈的移动应用市场中&#xff0c;寻找一个高效且成本友好的方式来推广自己的应用程序&#xff0c;成为了众多开发者面临的共同挑战。幸运的是&#xff0c;像"小猪APP分发www.appzhu.cn"这样的平台应运而生&#xff0c;为开发者提供了一个全面、免费的应用分发…

论文精读:HuggingGPT: Solving AI Tasks with ChatGPT and its Friends in Hugging Face

HuggingGPT: Solving AI Tasks with ChatGPT and its Friends in Hugging Face Status: Reading Author: Dongsheng Li, Kaitao Song, Weiming Lu, Xu Tan, Yongliang Shen, Yueting Zhuang Institution: 微软亚洲研究院&#xff08;Microsoft Research Asia&#xff09;, 浙江…

NLP(19)--大模型发展(3)

前言 仅记录学习过程&#xff0c;有问题欢迎讨论 大模型训练相关知识&#xff1a; 问题&#xff1a; 数据集过大&#xff0c;快速训练模型过大&#xff0c;gpu跑不完 方案&#xff1a; 数据并行训练&#xff1a; 复制数据&#xff08;batch_size&#xff09;到多个gpu&…

机器学习实验------Adaboost算法

第1关&#xff1a;什么是集成学习 任务描述 本关任务&#xff1a;根据本节课所学知识完成本关所设置的选择题。 第2关&#xff1a; Boosting 任务描述 本关任务&#xff1a;根据本节课所学知识完成本关所设置的选择题。 第3关&#xff1a;Adaboost算法流程 任务描述 …

C++学习/复习4--与类相关的概念/默认成员函数/运算符重载/Date类实现案例

一、类和对象 1.本章概要 2.C中的结构体(struct与class) 升级为类 &#xff08;1&#xff09;类及成员函数的两种定义方式 声明与定义分离 &#xff08;2&#xff09;权限 注意1&#xff1a;struct/class在权限上的区别 &#xff08;3&#xff09;封装 &#xff08;4&#x…

连公司WiFi后,无法访问外网,怎么回事,如何解决?

文章目录 封面问题描述问题探究什么是DNS&#xff1f;分布式&#xff0c;层次数据库如何理解分布式&#xff1f;如何理解层次&#xff1f; 本地DNS服务器迭代查询&#xff0c;递归查询DNS缓存参考资料 封面 问题描述 从甲方项目组返回公司后&#xff0c;我习惯性连上公司WiFi&…

50 http通用服务器

虽然我们说&#xff0c;应用层协议是我们程序猿自己定的 但实际上&#xff0c;已经有大佬们定义了一些现成的&#xff0c;又非常好用的应用层协议&#xff0c;供我们直接参考使用&#xff0c;http&#xff08;超文本传输协议&#xff09;就是其中之一 目录 认识urlurlencode和…

数据库(5)——DDL 表操作

表查询 先要进入到某一个数据库中才可使用这些指令。 SHOW TABLES; 可查询当前数据库中所有的表。 表创建 CREATE TABLE 表名( 字段1 类型 [COMMENT 字段1注释] ...... 字段n 类型 [COMMENT 字段n注释] )[COMMENT 表注释]; 例如&#xff0c;在student数据库里创建一张studen…

LeetCode热题100——矩阵

73.矩阵清零 题目 给定一个 *m* x *n* 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&#xff1a;[[1,0,1],[0,0,0],[1,0,1]] 示例…

记.netcore部署到银河麒麟linux服务器过程详解

一.服务器配置 操作系统:银河麒麟桌面操作系统V10 CPU:intel i5 内存:16G 内核:5.10.0.8-generic 未激活 二.运行环境安装 .netcore 6.0 runtime时安装下载离线包 Download .NET 6.0 (Linux, macOS, and Windows) -下载完后进行解压 sudo su #提权 mkdir -p $HOME/…

救援运输车3D三维虚拟展馆能分享给更多潜在买家

随着消费趋势的演进&#xff0c;个性化和附加服务需求日益凸显。加上疫情等因素影响下&#xff0c;一场创新的革命正在悄然兴起——3D沉浸式看车。 3D沉浸式看车&#xff0c;重新定义购车体验 不再受限于地理位置和时间&#xff0c;3D沉浸式看车是利用web3d开发建模技术将真实比…

C# 机构仿真实例

1、实现连杆带动滑块运动 一个连杆旋转带动另一个连杆&#xff0c;另一个连杆拖动滑块&#xff0c;点击“开始”按钮开始运动&#xff0c;再点击按钮&#xff0c;则停止运动。 2、实现程序 #region 机构仿真Image image null;Timer timer new Timer();int width 0;int heig…

一个机器学习问题的重新定义

任何事物都有两面性。 一些机器学习问题也是如此。并非每个回归问题&#xff08;你认为的&#xff09;都需要回归。仔细考虑和审视问题的业务不仅可以帮助开发更好的模型&#xff0c;还可以找到有效的解决方案。 重构或重新定义&#xff08;reframing&#xff09;是一种改变机…

【rust工具链】

1 查看正在使用的工具链 命令&#xff1a;rustup show 结果显示&#xff1a; 从图中可以看到正在使用的是rustc 1.76.0版本&#xff0c;也可以看到已安装的所有版本的工具链 2 使用默认工具链 命令&#xff1a;rustup default 版本号 例如&#xff1a;rustup default 1.58…

Python数据分析实验四:数据分析综合应用开发

目录 一、实验目的与要求二、主要实验过程1、加载数据集2、数据预处理3、划分数据集4、创建模型估计器5、模型拟合6、模型性能评估 三、主要程序清单和运行结果四、实验体会 一、实验目的与要求 1、目的&#xff1a; 综合运用所学知识&#xff0c;选取有实际背景的应用问题进行…