LeetCode
sillyxue
一以贯之的努力,不得懈怠的人生。
展开
-
LeetCode112:路径总和
题目给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22输出:true解释:等于目标和的根节点到叶节点路径如上图所示。输入:root = [], targetSum = 0输出:f原创 2022-04-29 22:41:14 · 384 阅读 · 0 评论 -
LeetCode110:平衡二叉树
题目给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。输入:root = [3,9,20,null,null,15,7]输出:true输入:root = [1,2,2,3,3,null,null,4,4]输出:false输入:root = []输出:true分析1)已知平衡二叉树指每个节点的左右子树高度差的绝对值不超过1。2)区分树的深度与高度的含义:深度指从上向下的最大节点数,需原创 2022-04-29 16:44:42 · 629 阅读 · 0 评论 -
LeetCode101:对称二叉树
问题给你一个二叉树的根节点 root , 检查它是否轴对称。输入:root = [1,2,2,3,4,4,3]输出:true输入:root = [1,2,2,null,3,null,3]输出:false分析1)判断一个二叉树是否轴对称。将这棵二叉树复制一份放在右边,问题转化为是否镜像。2)除根结点外,其他对应节点的比较均为第一棵树的左节点和第二棵树的右节点比较。3)利用递归的思想, 递归的比较t1.right与t2.left、t1.left与t2.right。判断终止条件为两棵树的当原创 2022-04-24 22:51:21 · 316 阅读 · 0 评论 -
LeetCode94: 二叉树的中序遍历
问题给定一个二叉树的根节点 root ,返回它的中序遍历。输入:root = [1,null,2,3]输出:[1,3,2]输入:root = []输出:[]输入:root = [1]输出:[1]分析1)二叉树的中序遍历,即按照左子树、根节点、右子树的方式遍历树。2)左子树或右子树可以按照同样的方式遍历,直到遍历完整棵树,具有递归的特点。3)定义中序遍历函数。先遍历左子树,再将此时的root节点放入数组,最后遍历右子树。递归结束条件为当前节点为空节点。代码/** * @par原创 2022-04-24 18:17:17 · 644 阅读 · 0 评论 -
LeetCode70:爬楼梯
问题假设你正在爬楼梯。需要 n 阶你才能到达楼顶。1 <= n <= 45每次可以爬 1 或 2 个台阶。有多少种不同的方法可以爬到楼顶呢?输入:n = 2输出:2解释:有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶输入:n = 3输出:3解释:有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶分析经典动态规划题目。1)寻找规律,写出递推公式。每次可以爬1或2个台阶,则1层只有一种方案;2原创 2022-04-20 21:38:46 · 374 阅读 · 0 评论 -
LeetCode67:二进制求和
问题给你两个二进制字符串,返回它们的和(用二进制表示)。输入为非空字符串且只包含数字 1 和 0。输入: a = "11", b = "1"输出: "100"输入: a = "1010", b = "1011"输出: "10101"分析动手计算总结规律。1)首先,需要将短的一个在前面进行补0,使两个数组长度相同。2)从后往前逐位相加。其中,返回值头部为(sum+jw)%2,进位为(sum+jw)/2。3)最后,当jw不为0时,返回值头部要追加进位。代码/** * @param原创 2022-04-19 23:30:11 · 242 阅读 · 0 评论 -
LeetCode53:最大子数组和
题目:最大子数组和给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组是数组中的一个连续部分。输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。输入:nums = [1]输出:1输入:nums = [5,4,-1,7,8]输出:23分析【贪心算法】局部最优推全局最优。1)首先,我们的全局目标是得到最大和,局部目标是找到一个子数组和最大。原创 2022-04-19 18:16:40 · 295 阅读 · 0 评论 -
LeetCode28:实现strStr()
题目:实现 strStr() 函数给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。当 needle 是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java 的 indexOf() 定义相符。输入:haystack = "hello", needle = "ll"输出:2输入:haystack = "aaaaa", needle = "bb原创 2022-04-19 14:25:33 · 423 阅读 · 0 评论 -
LeetCode21:合并两个有序链表
题目将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]输入:l1 = [], l2 = []输出:[]输入:l1 = [], l2 = [0]输出:[0]分析方法一:迭代创建一个虚拟头节点dummy,移动指针p指向它(真正的头节点为dummy.next)判断list1和list2是否为空,如果任意一个为空,则返回另外一个(已包含全为空情况)循环原创 2022-04-14 17:53:23 · 155 阅读 · 0 评论 -
LeetCode20:有效的括号
题目给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:1)左括号必须用相同类型的右括号闭合。2)左括号必须以正确的顺序闭合。输入:s = "()[]{}"输出:true输入:s = "{[]}"输出:true输入:s = "([)]"输出:false分析首先将字符串转化为数组创建一个新数组newArr【利用数组模拟栈的思想】循环判断数组当前项:如果匹配到右括号且与newArr中的左括号匹配则newArr原创 2022-04-14 11:00:48 · 515 阅读 · 0 评论 -
LeetCode14:最长公共前缀
题目编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串。输入:strs = ["flower","flow","flight"]输出:"fl"输入:strs = ["dog","racecar","car"]输出:""解释:输入不存在公共前缀。分析首先找出strs数组中最短的一项以最短的一项为基准,循环判断剩余其他项的对应位置字符是否与基准的相同。如果有任意一个不同了,直接返回结果;如果全部项对应位置都与之相同,则需要给结果添加当前位置的字符。其中原创 2022-04-14 09:49:54 · 177 阅读 · 0 评论