LeetCode
LeetCode刷题记录
CUG-GZ
这个作者很懒,什么都没留下…
展开
-
【LeetCode 43】字符串相乘
题目描述给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。示例 1:输入: num1 = "2", num2 = "3"输出: "6"示例 2:输入: num1 = "123", num2 = "456"输出: "56088"说明:num1 和 num2 的长度小于110。num1 和 num2 只包含数字 0-9。num1 和 num2 均不以零开头,除非是数字 0 本身。不能使用任何标准库的大数类原创 2020-10-18 22:33:24 · 206 阅读 · 0 评论 -
【LeetCode 617】合并二叉树
题目描述给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。示例 1:输入: Tree 1 Tree 2 1 2原创 2020-09-23 16:26:03 · 157 阅读 · 0 评论 -
【LeetCode 538】把二叉搜索树转换为累加树
题目描述给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。例如:输入: 原始二叉搜索树: 5 / \ 2 13输出: 转换为累加树: 18 / \ 20 13解题思路这也是一个简单题目,我们都知道二叉树的中序遍历原创 2020-09-21 22:59:58 · 145 阅读 · 0 评论 -
【LeetCode 78】子集
题目描述给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], []]解题思路这里求得是数组的子集,也就是说,在所有的子集中,每个元素㕛两种状态:出现和不出现。所以我们只要保证将将每个元素遍历,让他出现或者不出现。看下面的图示,取[1,2,3]的子集:我们只需要能原创 2020-09-20 10:00:18 · 216 阅读 · 0 评论 -
【LeetCode 69】x的平方根
题目描述实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。解题思路这里我们使用二分法来解决这个问题。我们知道,所有数字的平方根肯定比它一半是小的,所以我们可以直接将right设置为x / 2 这里我们使用使用>>原创 2020-09-18 01:22:21 · 317 阅读 · 0 评论 -
【LeetCode 67】二进制求和
题目描述给你两个二进制字符串,返回它们的和(用二进制表示)。输入为 非空 字符串且只包含数字 1 和 0。示例 1:输入: a = "11", b = "1"输出: "100"示例 2:输入: a = "1010", b = "1011"输出: "10101" 提示:每个字符串仅由字符 ‘0’ 或 ‘1’ 组成。1 <= a.length, b.length <= 104字符串如果不是 “0” ,就都不含前导零。实现思路这个使用最直接的方法来解决,直接对应位原创 2020-09-18 01:02:51 · 209 阅读 · 0 评论 -
【LeetCode 100】相同的树
题目描述给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3]输出: true示例 2:输入: 1 1 / \ 2 2原创 2020-09-18 00:39:05 · 225 阅读 · 0 评论 -
【LeetCode 12】整数装罗马数字
题目描述罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II原创 2020-09-17 15:28:43 · 143 阅读 · 0 评论 -
【LeetCode 18】四数之和
题目描述给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。示例:给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求的四元组集合为:[ [-1, 0, 0, 1], [-2, -1, 1, 2], [-2, 0, 0, 2原创 2020-09-16 17:18:50 · 255 阅读 · 0 评论 -
【LeetCode 36】有效的数独
题目描述判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。上图是一个部分填充的有效的数独。数独部分空格内已填入了数字,空白格用 ‘.’ 表示。示例 1:输入:[ ["5","3",".",".","7",".",".",".","."], ["6",".",".","1","9","5",".",".",".原创 2020-09-15 14:51:05 · 241 阅读 · 0 评论 -
【LeetCode 37】解数独
题目描述编写一个程序,通过已填充的空格来解决数独问题。一个数独的解法需遵循如下规则:数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。空白格用 ‘.’ 表示。一个数独。答案被标成红色。Note:给定的数独序列只包含数字 1-9 和字符 ‘.’ 。你可以假设给定的数独只有唯一解。给定数独永远是 9x9 形式的。解题思路对于这道题目,我们需要对每个格子进行遍历,只要格子为空,就对其进行数原创 2020-09-15 14:19:05 · 223 阅读 · 0 评论 -
【LeetCode 11】盛最多水的容器
题目描述给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。示例:输入:[1,8,6,2,5,4,8,3,7]输出:49通过次数原创 2020-09-13 15:06:13 · 235 阅读 · 0 评论 -
【LeetCode 16】最接近的三数之和
题目描述给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。示例:输入:nums = [-1,2,1,-4], target = 1输出:2解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。提示:3 <= nums.length <= 103-103 <= nums[i] <= 103-104 <原创 2020-09-13 14:27:49 · 208 阅读 · 0 评论 -
【LeetCode 79】单词搜索
题目描述给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例:board =[ ['A','B','C','E'], ['S','F','C','S'], ['A','D','E','E']]给定 word = "ABCCED", 返回 true给定 word = "SEE", 返回 true给定 word = "ABCB",原创 2020-09-13 00:45:05 · 260 阅读 · 0 评论 -
【LeetCode 35】 搜索插入位置
题目描述给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例 2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出: 0解题思路这道题最直接的思路就是直接遍历数组,锁定目标值的位置。该方法的时间复杂度为O(n)。我们还可以使用原创 2020-09-12 23:57:54 · 142 阅读 · 0 评论 -
【LeetCode 13】罗马数字转整数
题目描述罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II原创 2020-09-12 23:42:27 · 243 阅读 · 0 评论 -
【LeetCode】题解合集(JavaScript版)
LeetCode题解合集原创 2020-09-12 23:13:34 · 2482 阅读 · 0 评论 -
【LeetCode 34】在排序数组中查找元素的第一个和最后一个位置
题目描述给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: [3,4]示例 2:输入: nums = [5,7,7,8,8,10], target = 6输出: [-1,-1]实现思路这个题目中要求时间复杂度为O(log n) 级别。原创 2020-09-12 16:32:24 · 271 阅读 · 0 评论 -
【LeetCode 47】全排列 II
题目描述给定一个可包含重复数字的序列,返回所有不重复的全排列。示例:输入: [1,1,2]输出:[ [1,1,2], [1,2,1], [2,1,1]]解题思路这个题目和【LeetCode 46】全排列相似,只是这到题目中的元素可能是重复的,下面以题目中给的[1,1,2]为例:红色部分是需要剪掉的枝。这些路径上包含重复和元素和重复的结果。首先,我们需要对数组元素进行排序,便于后面前后两个元素进行对比。其他步骤和46题完全一致。只是剪枝的判断条件不一样。最关键的就是下面这原创 2020-09-12 15:53:49 · 193 阅读 · 0 评论 -
【LeetCode 46】全排列
题目描述给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]解题思路这个题目很容易理解,就是将数组中的所有数进行全排列,最后输出全排列的结果。这个应该还是回溯+剪枝的问题,以1为开头的组合为例:红色部分就是我们需要剪掉的枝。限制条件就是,结果数组不能重复,元素不能重复。这里我们初始化一个数组arr,当每一次将一个原创 2020-09-12 14:57:22 · 402 阅读 · 0 评论 -
【LeetCode 637】 二叉树的层平均值
题目描述给定一个非空二叉树, 返回一个由每层节点平均值组成的数组。示例 1:输入: 3 / \ 9 20 / \ 15 7输出:[3, 14.5, 11]解释:第 0 层的平均值是 3 , 第1层是 14.5 , 第2层是 11 。因此返回 [3, 14.5, 11] 。 提示:节点值的范围在32位有符号整数范围内。解题思路这是LeetCode今天的每日一题,是一道比较简单的题目,就是二叉树的层序遍历。这里使用BFS(广度优先遍历),在遍历的原创 2020-09-12 13:13:07 · 205 阅读 · 0 评论 -
【LeetCode 216】组合总和 III
题目描述找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。说明:所有数字都是正整数。解集不能包含重复的组合。示例 1:输入: k = 3, n = 7输出: [[1,2,4]]示例 2:输入: k = 3, n = 9输出: [[1,2,6], [1,3,5], [2,3,4]]解题思路最近的每日一题都是组合问题,这次也不多说了,直接看代码。【LeetCode 39】组合总和【LeetCode 40】组合总和原创 2020-09-11 14:08:53 · 198 阅读 · 0 评论 -
【LeetCode 40】组合总和 II
题目描述给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。说明:所有数字(包括目标数)都是正整数。解集不能包含重复的组合。示例 1:输入: candidates = [10,1,2,7,6,1,5], target = 8,所求解集为:[ [1, 7], [1, 2, 5], [2, 6], [1, 1, 6]]示例 2:原创 2020-09-10 20:08:34 · 222 阅读 · 0 评论 -
【LeetCode 39】组合总和
题目描述给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。示例 1:输入:candidates = [2,3,6,7], target = 7,所求解集为:[ [7], [2,2,3]]示例 2:输入:candidates = [2,3,5], targ原创 2020-09-09 12:08:30 · 462 阅读 · 0 评论 -
【LeetCode 530】二叉搜索树的最小绝对差
题目描述给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。示例:输入: 1 \ 3 / 2输出:1解释:最小绝对差为 1,其中 2 和 1 的差的绝对值为 1(或者 2 和 3)。提示:树中至少有 2 个节点。本题与 783 相同。解题思路这道题目比较简单,先回忆一下二叉搜索树的特征:左子树的值始终小于父节点的值,右子树的值始终大于父节点的值。那还有很重要的一点:在二叉搜索树的遍历中,中序遍历出来的结原创 2020-09-08 14:57:27 · 150 阅读 · 0 评论 -
【LeetCode 143】重排链表
题目描述给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:给定链表 1->2->3->4, 重新排列为 1->4->2->3.示例 2:给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3.实现思路这个题目的一个思路就是:首先使用快原创 2020-09-08 14:36:36 · 258 阅读 · 0 评论 -
【LeetCode 77】组合
题目描述给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。示例:输入: n = 4, k = 2输出:[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],]实现思路这道题目运用到了普通的回溯剪枝以及深度优先遍历。原本应该是这样的:我们可以看到,里面有很多的重复项,所以可以对其进行剪枝操作,即每次递归时开始数+1,剪枝之后就变成了这样:然后继续进行递归操作,当保存路径的数组的长度和k相等是就将结果保存原创 2020-09-08 12:42:44 · 249 阅读 · 0 评论 -
【LeetCode 113】路径总和 II
题目描述给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \7 2 5 1返回:[ [5,4,11,2], [5,8,4,5]]实现思路这个题目可以使用深度优先遍历来解决。首先,遍历到节点时,将当前节点的值放入到原创 2020-09-07 23:05:44 · 229 阅读 · 0 评论 -
【LeetCode 209】长度最小的子数组
题目描述给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。示例:输入:s = 7, nums = [2,3,1,2,4,3]输出:2解释:子数组 [4,3] 是该条件下的长度最小的子数组。进阶:如果你已经完成了 O(n) 时间复杂度的解法, 请尝试 O(n log n) 时间复杂度的解法。实现思路我们可以使用双指针来解决这个问题。初始化left、right两个指针,初始值为原创 2020-09-07 22:35:59 · 198 阅读 · 0 评论 -
【LeetCode 33】搜索旋转排序数组
题目描述假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。示例 1:输入: nums = [4,5,6,7,0,1,2], target = 0输出: 4示例 2:输入: nums = [4,5,6,7,0,1,2], tar原创 2020-09-07 17:38:21 · 239 阅读 · 0 评论 -
【LeetCode 199】二叉树的右视图
题目描述给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例:输入: [1,2,3,null,5,null,4]输出: [1, 3, 4]解释: 1 <--- / \2 3 <--- \ \ 5 4 <---实现思路对于二叉树的题目,最常用的方法就是深度优先遍历(DFS)和广度优先遍历(BFS)。下面就来用这两种方法来解决这个问题。DF原创 2020-09-07 16:40:35 · 381 阅读 · 0 评论 -
【LeetCode 257】二叉树的所有路径
题目描述给定一个二叉树,返回所有从根节点到叶子节点的路径。说明: 叶子节点是指没有子节点的节点。示例:输入: 1 / \2 3 \ 5输出: ["1->2->5", "1->3"]解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3实现思路这个题目比较简单,就是对二叉树数进行深度优先遍历,在遍历的过程中将当前节点的值存储在字符串中,直到没有子节点,就将这个遍历出的结果字符串存入结果数组中。该方法的时间复杂原创 2020-09-07 14:32:14 · 228 阅读 · 0 评论 -
【LeetCode 56】合并区间
题目描述给出一个区间的集合,请合并所有重叠的区间。示例 1:输入: intervals = [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:输入: intervals = [[1,4],[4,5]]输出: [[1,5]]解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。注意:输入类型已于2019年4月15日更改。 请重置默认代码定原创 2020-09-07 13:47:53 · 220 阅读 · 0 评论 -
【LeetCode 347】前 K 个高频元素
题目要求给定一个非空的整数数组,返回其中出现频率前 k 高的元素。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]提示:你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。你的算法的时间复杂度必须优于 O(n log n) , n 是数组的大小。题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的。你可以按任意顺序返回答案。原创 2020-09-07 13:01:01 · 176 阅读 · 0 评论 -
【LeetCode 215】数组中的第K个最大元素
题目描述在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。解题思路最直接的思路就是对数组进行排序,然后直接返回排序后数组的倒数第k个元素。除了使用sort()方法直接对数组进行排序之外,我们还原创 2020-09-06 21:59:29 · 1815 阅读 · 0 评论 -
【LeetCode 107】二叉树的层次遍历 II
题目描述给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其自底向上的层次遍历为:[ [15,7], [9,20], [3]]实现思路对于这道题目,对二叉树进行层序遍历,最直接的方法就是使用BFS(广度优先遍历)。首先创建一个队列,将当前你的节点放进去,队列中的节点始终原创 2020-09-06 20:44:08 · 202 阅读 · 0 评论 -
【LeetCode 60】第k个排列
题目描述给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:"123""132""213""231""312""321"给定 n 和 k,返回第 k 个排列。说明:给定 n 的范围是 [1, 9]。给定 k 的范围是[1, n!]。示例 1:输入: n = 3, k = 3输出: "213"示例 2:输入: n = 4, k = 9输出: "2314"解题思路对于这道题原创 2020-09-06 11:07:46 · 178 阅读 · 0 评论 -
【LeetCode 486】预测赢家
题目描述给定一个表示分数的非负整数数组。 玩家 1 从数组任意一端拿取一个分数,随后玩家 2 继续从剩余数组任意一端拿取分数,然后玩家 1 拿,…… 。每次一个玩家只能拿取一个分数,分数被拿取之后不再可取。直到没有剩余分数可取时游戏结束。最终获得分数总和最多的玩家获胜。给定一个表示分数的数组,预测玩家1是否会成为赢家。你可以假设每个玩家的玩法都会使他的分数最大化。示例 1:输入:[1, 5, 2]输出:False解释:一开始,玩家1可以从1和2中进行选择。如果他选择 2(或者 1 ),那么玩家原创 2020-09-01 23:18:04 · 218 阅读 · 0 评论 -
【LeetCode 22】括号生成
题目描述数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例:输入:n = 3输出:[ "((()))", "(()())", "(())()", "()(())", "()()()" ]解题思路这个题目的一个比较直接的思路就是使用递归,对于左括号的数量,要控制小于n,对于右括号的数量,要控制小于左括号的数量,并且要小于n,这样不断递归,保存可能的结果。代码实现/*原创 2020-08-30 13:16:59 · 236 阅读 · 0 评论 -
【LeetCode 25】 K 个一组翻转链表
题目描述给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。示例:给你这个链表:1->2->3->4->5当 k = 2 时,应当返回: 2->1->4->3->5当 k = 3 时,应当返回: 3->2->1->4->5说明:你的算法只能使用常数的额外空间。你不能只是单纯的改变节点内部的值,原创 2020-08-25 23:36:12 · 535 阅读 · 0 评论