代码随想录刷题学习日记

仅为个人记录复盘学习历程,解题思路来自代码随想录

代码随想录刷题笔记总结网址:
代码随想录

递归函数什么时候需要返回值?什么时候不需要返回值?

如果需要搜索整棵二叉树且不用处理递归返回值,递归函数就不要返回值。

如果需要搜索整棵二叉树且需要处理递归返回值,递归函数就需要返回值。 

如果要判断是否有符合条件的路径,那么递归一定需要返回值,因为遇到符合条件的路径了就要及时返回。

112. 路径总和

给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。

提供参数:根结点root

关键思路:本题需要判断是否有符合条件的路径,那么递归一定需要返回值,因为遇到符合条件的路径了就要及时返回。本题采用递归+回溯的方法来探索解空间树,使用先序遍历来遍历整个二叉树,在遍历过程中累计路径上的值,当遇到叶节点时进行判断累计值是否与目标值相等,进而判断本条路径是否满足条件,满足条件则返回,不满足条件继续遍历,直到满足条件或遍历完整棵树。本题在值的累加上使用相反的方法,遍历节点时减去当前节点的值。

主要操作:

递归三要素

1.返回值类型与参数:

本题需要返回值,且判断是否有满足条件的路径,返回值类型为boolean,参数为节点node,目标值count。

2.终止条件:

判断是否为叶子节点,且判断是否减去叶子节点的值后为0,为0返回true,否则为叶子节点返回false。

3.单层递归逻辑:

如果左子节点不为空,count减去当前结点值,继续遍历左子节点,结束后回溯(加回结点值)。

如果右子节点不为空,count减去当前结点值,继续遍历右子节点,结束后回溯(加回结点值)。

代码大致如下:

    public boolean hasPathSum(TreeNode root, int targetSum) {if(root==null)return false;return traversal(root,targetSum);}public boolean traversal(TreeNode node,int count){//终止条件if(node.left==null&&node.right==null&&count-node.val==0)return true;if(node.left==null&&node.right==null)return false;//单层递归逻辑if(node.left!=null){count-=node.val;if(traversal(node.left,count))return true;count+=node.val;}if(node.right!=null){count-=node.val;if(traversal(node.right,count))return true;count+=node.val;}return false;}

113. 路径总和ii

给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。

提供参数:根结点root

关键思路:递归遍历+回溯,遍历是不仅仅需要记录累加值还需要记录路径信息,当遇到叶子节点时判断是否满足条件,满足条件将当前路径加入到结果集中,然后回溯,继续遍历,寻找所有满足条件的路径。

主要操作:

递归三要素

1.返回值类型和参数:

本题需要搜索整棵二叉树且不用处理递归返回值,递归函数就不要返回值。需要参数节点node,和目标值计算count,需要全局变量res记录结果,path记录路径信息。

2.终止条件:

与上题终止条件类似,判断为叶子节点后,如果当前路径满足条件,则加入结果集,然后返回,如果不满足条件,则直接返回。

3.单层递归逻辑:

如果左子节点不为空,先将当前节点加入路径,减去当前节点值,遍历左子节点,完成后回溯(在路径中删除当前节点,加回当前结点值)。

如果右子节点不为空,先将当前节点加入路径,减去当前节点值,遍历右子节点,完成后回溯(在路径中删除当前节点,加回当前结点值)。

代码大致如下;

    public List<List<Integer>>res;public List<Integer>path;public List<List<Integer>> pathSum(TreeNode root, int targetSum) {res=new ArrayList<>();path=new ArrayList<>();if(root==null)return res;traversal(root,targetSum);return res;}public void traversal(TreeNode node,int count){//终止条件if(node.left==null&&node.right==null&&count-node.val==0){path.add(node.val);res.add(new ArrayList(path));path.remove(path.size()-1);return;}if(node.left==null&&node.right==null)return;//单层递归逻辑if(node.left!=null){path.add(node.val);count-=node.val;traversal(node.left,count);count+=node.val;path.remove(path.size()-1);}if(node.right!=null){path.add(node.val);count-=node.val;traversal(node.right,count);count+=node.val;path.remove(path.size()-1);}}

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

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

相关文章

Nuxt.js 应用中的 nitro:config 事件钩子详解

title: Nuxt.js 应用中的 nitro:config 事件钩子详解 date: 2024/11/2 updated: 2024/11/2 author: cmdragon excerpt: nitro:config 是 Nuxt 3 中的一个生命周期钩子,允许开发者在初始化 Nitro 之前自定义 Nitro 的配置。Nitro 是 Nuxt 3 的服务器引擎,负责处理请求、渲…

[论文阅读]LOGAN: Membership Inference Attacks Against Generative Models

LOGAN: Membership Inference Attacks Against Generative Models https://arxiv.org/abs/1705.07663v4 Proceedings on Privacy Enhancing Technologies &#xff08;PoPETs&#xff09;&#xff0c;第 2019 卷&#xff0c;第 1 期。 这篇文章是17年的一篇文章&#xff0c;…

使用Vite构建现代化前端应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用Vite构建现代化前端应用 引言 Vite 简介 安装 Vite 创建项目 启动开发服务器 项目结构 配置 Vite 开发模式 生产构建 使用插…

Node.js:模块 包

Node.js&#xff1a;模块 & 包 模块module对象 包npm安装包配置文件镜像源 分类 模块 模块化是指解决一个复杂问题时&#xff0c;自顶向下逐层把系统划分成若干模块的过程。对于整个系统来说&#xff0c;模块是可组合、分解和更换的单元。 简单来说&#xff0c;就是把一个…

【Arduino】一分钟快速在vs code 编译开发Arduino

下载Arduino 对于一些开发者来说&#xff0c;Arduino开发较为不方便&#xff0c;不管从代码的阅读性、开发效率等等方面&#xff0c;vs code都要优于Arduino IDE开发&#xff0c;而且vs code开发可以使用插件&#xff0c;比如一些AI代码插件&#xff0c;可以加快开发速率&#…

WPF+MVVM案例实战(十九)- 自定义字体图标按钮的封装与实现(EF类)

文章目录 1、案例效果1、按钮分类2、E类按钮功能实现与封装1.文件创建与代码实现2、样式引用与封装 3、F类按钮功能实现与封装1、文件创建与代码实现2、样式引用与封装 3、按钮案例演示1、页面实现与文件创建2、运行效果如下 4、源代码获取 1、案例效果 1、按钮分类 在WPF开发…

Java基本语法和基础数据类型——针对实习面试

目录 Java基本语法和基础数据类型标识符和关键字有什么区别&#xff1f;Java关键字有哪些&#xff1f;Java基本数据类型有哪些&#xff1f;什么是自动装箱和拆箱&#xff1f;自动装箱&#xff08;Autoboxing&#xff09;自动拆箱&#xff08;Unboxing&#xff09; 自动装箱和拆…

c# 值类型

目录 1、c#类型2、值类型2.1 结构体2.2 枚举 1、c#类型 类型&#xff08;Type&#xff09;又叫数据类型&#xff08;Data Type&#xff09;。 A data type is a homogeneous collection of values,effectively prensented,equipped with a set of operations which manipulate…

【压力测试】如何确定系统最大并发用户数?

一、明确测试目的与了解需求 明确测试目的&#xff1a;首先需要明确测试的目的&#xff0c;即为什么要确定系统的最大并发用户数。这通常与业务需求、系统预期的最大用户负载以及系统的稳定性要求相关。 了解业务需求&#xff1a;深入了解系统的业务特性&#xff0c;包括用户行…

【玉米叶部病害识别】Python+深度学习+人工智能+图像识别+CNN卷积神经网络算法+TensorFlow

一、介绍 玉米病害识别系统&#xff0c;本系统使用Python作为主要开发语言&#xff0c;通过收集了8种常见的玉米叶部病害图片数据集&#xff08;‘矮花叶病’, ‘健康’, ‘灰斑病一般’, ‘灰斑病严重’, ‘锈病一般’, ‘锈病严重’, ‘叶斑病一般’, ‘叶斑病严重’&#x…

PAT甲级-1048 Find Coins

题目 题目大意 给出硬币的个数n和要付费的钱m&#xff0c;接下来给出每个硬币的面值。要求从这些硬币中找到两个硬币v1, v2&#xff0c;使得v1 v2 m&#xff0c;且v1 < v2&#xff0c;输出v1 v2。如果不能找到这两个硬币&#xff0c;输出No Solution。 思路 刚开始用的…

算法练习:LCR 179. 查找总价格为目标值的两个商品

题目链接&#xff1a;LCR 179. 查找总价格为目标值的两个商品 利用双指针位于数值两端来进行控制&#xff0c;定义sum来记录两指针分别对应的值的和&#xff0c; 这里有个重要的点就是该数组是升序&#xff0c;所以&#xff1a; 当sum > target时&#xff0c;end--&#x…

构建数据湖仓的开源技术栈有哪些

湖仓一体架构是一种新兴的数据管理方式&#xff0c;它融合了数据湖和数据仓库的优势&#xff0c;提供了统一的数据存储、事务支持、数据治理、实时与批处理能力以及弹性和可扩展性。在开源领域&#xff0c;湖仓一体技术栈的选择非常关键&#xff0c;因为它直接影响到系统的灵活…

每日OJ题_牛客_排序子序列_模拟_C++_Java

目录 牛客_排序子序列_模拟 题目解析 C代码 Java代码 牛客_排序子序列_模拟 排序子序列_牛客笔试题_牛客网 (nowcoder.com) 描述&#xff1a; 牛牛定义排序子序列为一个数组中一段连续的子序列,并且这段子序列是非递增或者非递减排序的。牛牛有一个长度为n的整数数…

电脑软件:推荐一款免费且实用的电脑开关机小工具

目录 一、软件简介 二、软件功能 三、软件特点 四、使用说明 五、软件下载 今天给大家推荐一款免费且实用的电脑开关机小工具KShutdown&#xff0c;有需要的朋友可以下载试一下&#xff01; 一、软件简介 KShutdown是一款精巧且实用的定时自动关机小工具&#xff0c;对于…

网关如何传递信息给微服务

前情回顾 上篇我们已经完成了网关对所有微服务请求的拦截以及JWT的登录校验。 客户端和微服务之间的桥梁--网关&#xff08;身份校验&#xff09;https://mp.csdn.net/mp_blog/creation/editor/143425484 问题引入 现在的问题是在一些微服务业务中&#xff0c;需要用到用户…

BGP路由优选+EVPN

BGP 的路由优选规则是一套多步决策链&#xff0c;用来确定在多个可行路由中选择最优的路由。BGP 是一种路径向量协议&#xff0c;通过这些优选规则&#xff0c;网络管理员可以控制数据流量的流向&#xff0c;确保网络的稳定性和效率。下面以一个实例来详细说明 BGP 的优选规则及…

Vue3图片懒加载(vue3-lazyload)

Vue2图片懒加载 参考文档&#xff1a;vue3-lazyload 效果如下图&#xff1a;vue3-lazyload0.3.8 在线预览 安装 npm install vue3-lazyload # or yarn add vue3-lazyload # or pnpm add vue3-lazyload引入并注册 import { createApp } from vue import VueLazyLoad from v…

Hudi Upsert原理

1. 前言 如果要深入了解Apache Hudi技术的应用或是性能调优&#xff0c;那么明白源码中的原理对我们会有很大的帮助。Upsert是Apache Hudi的核心功能之一&#xff0c;主要完成增量数据在HDFS/对象存储上的修改&#xff0c;并可以支持事务。而在Hive中修改数据需要重新分区或重…

ctfshow web入门文件上传总结

1.web151 前端验证 前端验证&#xff0c;修改html代码&#xff0c;上传还有一句话木马的php文件,之后用蚁剑连接即可找到flag <?php eval($_POST[1])?>2.web152 后端验证&#xff0c;修改mime类型(content-type) burp抓包&#xff0c;修改content-type为image/png …