- 博客(109)
- 收藏
- 关注
原创 LeetCode 130. 被围绕的区域
LeetCode 130. 被围绕的区域题目给定一个二维的矩阵,包含 ‘X’ 和 ‘O’(字母 O)。找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。示例:X X X XX O O XX X O XX O X X运行你的函数后,矩阵变为:X X X XX X X XX X X XX O X X解释:被围绕的区间不会存在于边界上,换句话说...
2019-12-01 10:40:33
310
原创 LeetCode 129. 求根到叶子节点数字之和
LeetCode 129. 求根到叶子节点数字之和题目给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。例如,从根到叶子节点路径 1->2->3 代表数字 123。计算从根到叶子节点生成的所有数字之和。说明: 叶子节点是指没有子节点的节点。示例 1:输入: [1,2,3]1/ 2 3输出: 25解释:从根到叶子...
2019-12-01 09:54:15
152
原创 LeetCode 125. 验证回文串
LeetCode 125. 验证回文串题目给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: “A man, a plan, a canal: Panama”输出: true示例 2:输入: “race a car”输出: false分析本来想先将输入的字符串处理一下,结果超过内存限...
2019-11-30 10:37:34
168
原创 LeetCode 122. 买卖股票的最佳时机 II
LeetCode 122. 买卖股票的最佳时机 II题目给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,...
2019-11-30 09:52:04
114
原创 LeetCode 121. 买卖股票的最佳时机
LeetCode 121. 买卖股票的最佳时机题目给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候...
2019-11-30 09:43:05
115
原创 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
140
原创 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
318
原创 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
111
原创 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
155
原创 LeetCode 116. 填充每个节点的下一个右侧节点指针
LeetCode 116. 填充每个节点的下一个右侧节点指针题目给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:struct Node {int val;Node *left;Node *right;Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 N...
2019-11-29 10:08:21
157
原创 LeetCode 114. 二叉树展开为链表
LeetCode 114. 二叉树展开为链表题目给定一个二叉树,原地将它展开为链表。例如,给定二叉树1/ 2 5/ \ 3 4 6将其展开为:123456分析每次将当前结点的右节点接到左节点的最右结点上,让后用左节点替换右节点。C++代码/** * Definition for a binary tree node. * str...
2019-11-28 09:47:57
299
原创 LeetCode 113. 路径总和 II
LeetCode 113. 路径总和 II题目给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ /...
2019-11-28 09:32:06
125
原创 LeetCode 112. 路径总和
LeetCode 112. 路径总和题目给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 /...
2019-11-28 09:27:08
161
原创 LeetCode 111. 二叉树的最小深度
LeetCode 111. 二叉树的最小深度题目给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回它的最小深度 2.分析更上一题原理上一样,递归判断每个结点对应的最小高度即可。C++代码...
2019-11-28 09:17:21
128
原创 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
98
原创 LeetCode 109. 有序链表转换二叉搜索树
LeetCode 109. 有序链表转换二叉搜索树题目给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定的有序链表: [-10, -3, 0, 5, 9],一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树:...
2019-11-27 10:55:32
113
原创 LeetCode 108. 将有序数组转换为二叉搜索树
LeetCode 108. 将有序数组转换为二叉搜索树题目将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \-3 ...
2019-11-27 10:47:01
109
原创 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
105
原创 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
139
原创 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
128
原创 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
94
原创 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
143
原创 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
87
原创 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
102
原创 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
93
原创 LeetCode 98. 验证二叉搜索树
LeetCode 98. 验证二叉搜索树题目给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入:2/ 1 3输出: true示例 2:输入:5/ 1 4/ 3 6输出: false解释:...
2019-11-25 15:10:44
103
原创 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
112
原创 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
169
原创 LeetCode 94. 二叉树的中序遍历
LeetCode 94. 二叉树的中序遍历题目给定一个二叉树,返回它的中序 遍历。示例:输入: [1,null,2,3]12/3输出: [1,3,2]进阶: 递归算法很简单,你可以通过迭代算法完成吗?分析必须要用迭代的话,就得分情况考虑一下。首先如果没有left,那么就直接将当前结点加入结果就行。如果又left话,就将当前节点和右边部分加入左边子树的输出等价位置即可,也就...
2019-11-23 16:06:57
102
原创 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
126
原创 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
139
原创 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
381
原创 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
169
原创 LeetCode 89. 格雷编码
LeetCode 89. 格雷编码题目格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。格雷编码序列必须以 0 开头。示例 1:输入: 2输出: [0,1,3,2]解释:00 - 001 - 111 - 310 - 2对于给定的 n,其格雷编码序列并不唯一。例如,[0,2,3,1] 也是一...
2019-11-21 15:19:43
157
原创 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
217
原创 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
112
原创 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
126
原创 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
88
原创 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
491
原创 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
209
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人