- 博客(109)
- 收藏
- 关注
原创 LeetCode 130. 被围绕的区域
LeetCode 130. 被围绕的区域 题目 给定一个二维的矩阵,包含 ‘X’ 和 ‘O’(字母 O)。 找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。 示例: X X X X X O O X X X O X X O X X 运行你的函数后,矩阵变为: X X X X X X X X X X X X X O X X 解释: 被围绕的区间不会存在于边界上,换句话说...
2019-12-01 10:40:33
358
原创 LeetCode 129. 求根到叶子节点数字之和
LeetCode 129. 求根到叶子节点数字之和 题目 给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。 例如,从根到叶子节点路径 1->2->3 代表数字 123。 计算从根到叶子节点生成的所有数字之和。 说明: 叶子节点是指没有子节点的节点。 示例 1: 输入: [1,2,3] 1 / 2 3 输出: 25 解释: 从根到叶子...
2019-12-01 09:54:15
183
原创 LeetCode 125. 验证回文串
LeetCode 125. 验证回文串 题目 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。 说明:本题中,我们将空字符串定义为有效的回文串。 示例 1: 输入: “A man, a plan, a canal: Panama” 输出: true 示例 2: 输入: “race a car” 输出: false 分析 本来想先将输入的字符串处理一下,结果超过内存限...
2019-11-30 10:37:34
206
原创 LeetCode 122. 买卖股票的最佳时机 II
LeetCode 122. 买卖股票的最佳时机 II 题目 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 示例 1: 输入: [7,1,5,3,6,4] 输出: 7 解释: 在第 2 天(股票价格 = 1)的时候买入,...
2019-11-30 09:52:04
146
原创 LeetCode 121. 买卖股票的最佳时机
LeetCode 121. 买卖股票的最佳时机 题目 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。 注意你不能在买入股票前卖出股票。 示例 1: 输入: [7,1,5,3,6,4] 输出: 5 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候...
2019-11-30 09:43:05
139
原创 LeetCode 120. 三角形最小路径和
LeetCode 120. 三角形最小路径和 题目 给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。 例如,给定三角形: [ [2], [3,4], [6,5,7], [4,1,8,3] ] 自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。 说明: 如果你可以只使用 O(n) 的额外空间(n 为三角形的总行数)来解决这个问题,那么你的算法会...
2019-11-30 09:31:06
170
原创 LeetCode 119. 杨辉三角 II
LeetCode 119. 杨辉三角 II 题目 给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。 在杨辉三角中,每个数是它左上方和右上方的数的和。 示例: 输入: 3 输出: [1,3,3,1] 进阶: 你可以优化你的算法到 O(k) 空间复杂度吗? 分析 每次保存本次结果和上次结果即可。还可以用数学方法,杨辉三角每一列等于(x + y)^k的各项系数。 C++代码 cla...
2019-11-29 11:17:35
359
原创 LeetCode 118. 杨辉三角
LeetCode 118. 杨辉三角 题目 给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。 在杨辉三角中,每个数是它左上方和右上方的数的和。 示例: 输入: 5 输出: [ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1] ] 分析 杨辉三角要什么分析? C++代码 class Solution { public: vect...
2019-11-29 11:04:52
143
原创 LeetCode 117. 填充每个节点的下一个右侧节点指针 II
LeetCode 117. 填充每个节点的下一个右侧节点指针 II 题目 给定一个二叉树 struct Node { int val; Node *left; Node *right; Node *next; } 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。 初始状态下,所有 next 指针都被设置为 NULL。 进...
2019-11-29 10:49:29
182
原创 LeetCode 116. 填充每个节点的下一个右侧节点指针
LeetCode 116. 填充每个节点的下一个右侧节点指针 题目 给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下: struct Node { int val; Node *left; Node *right; Node *next; } 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 N...
2019-11-29 10:08:21
187
原创 LeetCode 114. 二叉树展开为链表
LeetCode 114. 二叉树展开为链表 题目 给定一个二叉树,原地将它展开为链表。 例如,给定二叉树 1 / 2 5 / \ 3 4 6 将其展开为: 1 2 3 4 5 6 分析 每次将当前结点的右节点接到左节点的最右结点上,让后用左节点替换右节点。 C++代码 /** * Definition for a binary tree node. * str...
2019-11-28 09:47:57
330
原创 LeetCode 113. 路径总和 II
LeetCode 113. 路径总和 II 题目 给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。 说明: 叶子节点是指没有子节点的节点。 示例: 给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ /...
2019-11-28 09:32:06
153
原创 LeetCode 112. 路径总和
LeetCode 112. 路径总和 题目 给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。 说明: 叶子节点是指没有子节点的节点。 示例: 给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 /...
2019-11-28 09:27:08
199
原创 LeetCode 111. 二叉树的最小深度
LeetCode 111. 二叉树的最小深度 题目 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 3 / 9 20 / 15 7 返回它的最小深度 2. 分析 更上一题原理上一样,递归判断每个结点对应的最小高度即可。 C++代码...
2019-11-28 09:17:21
162
原创 LeetCode 110. 平衡二叉树
LeetCode 110. 平衡二叉树 题目 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。 示例 1: 给定二叉树 [3,9,20,null,null,15,7] 3 / 9 20 / 15 7 返回 true 。 示例 2: 给定二叉树 [1,2,2,3,3,null,null,4,...
2019-11-28 09:01:17
127
原创 LeetCode 109. 有序链表转换二叉搜索树
LeetCode 109. 有序链表转换二叉搜索树 题目 给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。 示例: 给定的有序链表: [-10, -3, 0, 5, 9], 一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树: ...
2019-11-27 10:55:32
144
原创 LeetCode 108. 将有序数组转换为二叉搜索树
LeetCode 108. 将有序数组转换为二叉搜索树 题目 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。 示例: 给定有序数组: [-10,-3,0,5,9], 一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 ...
2019-11-27 10:47:01
139
原创 LeetCode 107. 二叉树的层次遍历 II
LeetCode 107. 二叉树的层次遍历 II 题目 给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 例如: 给定二叉树 [3,9,20,null,null,15,7], 3 / 9 20 / 15 7 返回其自底向上的层次遍历为: [ [15,7], [9,20], [3] ] 分析 跟102相同,倒过来即可。 C+...
2019-11-27 10:45:50
137
原创 LeetCode 106. 从中序与后序遍历序列构造二叉树
LeetCode 106. 从中序与后序遍历序列构造二叉树 题目 根据一棵树的中序遍历与后序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 中序遍历 inorder = [9,3,15,20,7] 后序遍历 postorder = [9,15,7,20,3] 返回如下的二叉树: 3 / 9 20 / 15 7 分析 与上一题大同小异,逻辑上还是用中序判断左右是否...
2019-11-27 10:19:52
171
原创 LeetCode 105. 从前序与中序遍历序列构造二叉树
LeetCode 105. 从前序与中序遍历序列构造二叉树 题目 根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3 / 9 20 / 15 7 分析 先把中序元素出现的顺序记录下来。在中序顺序中,一...
2019-11-26 10:14:09
153
原创 LeetCode 104. 二叉树的最大深度
LeetCode 104. 二叉树的最大深度 题目 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 3 / 9 20 / 15 7 返回它的最大深度 3 。 分析 随便你怎么遍历一遍,记录最大深度即可。 C++代码 /** * D...
2019-11-26 09:41:12
127
原创 LeetCode 103. 二叉树的锯齿形层次遍历
LeetCode 103. 二叉树的锯齿形层次遍历 题目 给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 例如: 给定二叉树 [3,9,20,null,null,15,7], 3 / 9 20 / 15 7 返回锯齿形层次遍历如下: [ [3], [20,9], [15,7] ] 分析 还是二叉树,还是遍历,不...
2019-11-26 09:37:18
168
原创 LeetCode 102. 二叉树的层次遍历
LeetCode 102. 二叉树的层次遍历 题目 给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / 9 20 / 15 7 返回其层次遍历结果: [ [3], [9,20], [15,7] ] 分析 和别的二叉树遍历一样,dfs或者bfs即可。用队列迭代处理也行。 C++...
2019-11-26 09:13:05
116
原创 LeetCode 101. 对称二叉树
LeetCode 101. 对称二叉树 题目 给定一个二叉树,检查它是否是镜像对称的。 例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / 2 2 / \ / 3 4 4 3 但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / 2 2 \ 3 3 说明: 如果你可以运用递归和迭代两种方法解决这个问题,会很加分。 分析...
2019-11-25 15:25:24
125
原创 LeetCode 100. 相同的树
LeetCode 100. 相同的树 题目 给定两个二叉树,编写一个函数来检验它们是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 示例 1: 输入: 1 1 / \ / 2 3 2 3 [1,2,3], [1,2,3] 输出: true 示例 2: 输入: 1 1 /...
2019-11-25 15:16:02
122
原创 LeetCode 98. 验证二叉搜索树
LeetCode 98. 验证二叉搜索树 题目 给定一个二叉树,判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 示例 1: 输入: 2 / 1 3 输出: true 示例 2: 输入: 5 / 1 4 / 3 6 输出: false 解释:...
2019-11-25 15:10:44
131
原创 LeetCode 96. 不同的二叉搜索树
LeetCode 96. 不同的二叉搜索树 题目 给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种? 示例: 输入: 3 输出: 5 解释: 给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / / / \ 3 2 1 1 3 ...
2019-11-25 14:44:55
147
原创 LeetCode 95. 不同的二叉搜索树 II
LeetCode 95. 不同的二叉搜索树 II 题目 给定一个整数 n,生成所有由 1 … n 为节点所组成的二叉搜索树。 示例: 输入: 3 输出: [ [1,null,3,2], [3,2,null,1], [3,1,null,null,2], [2,1,3], [1,null,2,null,3] ] 解释: 以上的输出对应以下 5 种不同结构的二叉搜索树: 1 3 ...
2019-11-25 14:21:06
216
原创 LeetCode 94. 二叉树的中序遍历
LeetCode 94. 二叉树的中序遍历 题目 给定一个二叉树,返回它的中序 遍历。 示例: 输入: [1,null,2,3] 1 2 / 3 输出: [1,3,2] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? 分析 必须要用迭代的话,就得分情况考虑一下。首先如果没有left,那么就直接将当前结点加入结果就行。如果又left话,就将当前节点和右边部分加入左边子树的输出等价位置即可,也就...
2019-11-23 16:06:57
131
原创 LeetCode 93. 复原IP地址
LeetCode 93. 复原IP地址 题目 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。 示例: 输入: “25525511135” 输出: [“255.255.11.135”, “255.255.111.35”] 分析 只用确认三个点的位置就可以了,所以用三个循环来确定点的位置,如果太大了直接continue,如果一个长度不是1的部分头部是0,也continue。 C+...
2019-11-23 15:54:01
167
原创 LeetCode 92. 反转链表 II
LeetCode 92. 反转链表 II 题目 反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。 说明: 1 ≤ m ≤ n ≤ 链表长度。 示例: 输入: 1->2->3->4->5->NULL, m = 2, n = 4 输出: 1->4->3->2->5->NULL 分析 只让遍历一遍,然而链表又不能回头,所以只能递归。 C...
2019-11-23 15:26:27
161
原创 LeetCode 91. 解码方法
LeetCode 91. 解码方法 题目 一条包含字母 A-Z 的消息通过以下方式进行了编码: ‘A’ -> 1 ‘B’ -> 2 … ‘Z’ -> 26 给定一个只包含数字的非空字符串,请计算解码方法的总数。 示例 1: 输入: “12” 输出: 2 解释: 它可以解码为 “AB”(1 2)或者 “L”(12)。 示例 2: 输入: “226” 输出: 3 解释: 它可以解码为...
2019-11-23 15:07:28
566
原创 LeetCode 90. 子集 II
LeetCode 90. 子集 II 题目 给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 示例: 输入: [1,2,2] 输出: [ [2], [1], [1,2,2], [2,2], [1,2], [] ] 分析 与子集那题类似。然而有重复的话使用一样的算法结果也会有重复。所以如果有重复只是用最左边的值,用完就在nums中删除该...
2019-11-21 15:44:02
199
原创 LeetCode 89. 格雷编码
LeetCode 89. 格雷编码 题目 格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。 给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。格雷编码序列必须以 0 开头。 示例 1: 输入: 2 输出: [0,1,3,2] 解释: 00 - 0 01 - 1 11 - 3 10 - 2 对于给定的 n,其格雷编码序列并不唯一。 例如,[0,2,3,1] 也是一...
2019-11-21 15:19:43
191
原创 LeetCode 88. 合并两个有序数组
LeetCode 88. 合并两个有序数组 题目 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。 示例: 输入: nums1 = [1,2,3,...
2019-11-21 15:01:44
241
原创 LeetCode 86. 分隔链表
LeetCode 86. 分隔链表 题目 给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。 你应当保留两个分区中每个节点的初始相对位置。 示例: 输入: head = 1->4->3->2->5->2, x = 3 输出: 1->2->2->4->3->5 分析 用两个新链表分别存贮大...
2019-11-21 14:48:47
139
原创 LeetCode 83. 删除排序链表中的重复元素
LeetCode 83. 删除排序链表中的重复元素 题目 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。 示例 1: 输入: 1->1->2 输出: 1->2 示例 2: 输入: 1->1->2->3->3 输出: 1->2->3 分析 与上一题基本相同,但是更简单。如果新链表为空或者新链表尾部val与老链表遍历值不同就加入新值...
2019-11-21 14:28:25
156
原创 LeetCode 82. 删除排序链表中的重复元素 II
82. 删除排序链表中的重复元素 II 题目 给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。 示例 1: 输入: 1->2->3->3->4->4->5 输出: 1->2->5 示例 2: 输入: 1->1->1->2->3 输出: 2->3 分析 有两种思路,可以在原链表上快慢指...
2019-11-21 14:24:32
109
原创 LeetCode 81. 搜索旋转排序数组 II
LeetCode 81. 搜索旋转排序数组 II 题目 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。 编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true,否则返回 false。 示例 1: 输入: nums = [2,5,6,0,0,1,2], target = 0 输出: ...
2019-11-19 11:24:51
532
原创 LeetCode 80. 删除排序数组中的重复项 II
LeetCode 80. 删除排序数组中的重复项 II 题目 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 示例 1: 给定 nums = [1,1,1,2,2,3], 函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1...
2019-11-19 10:57:05
246
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人