LeetCode/LintCode
刷刷刷
Meta吴彦祖
这个作者很懒,什么都没留下…
展开
-
LeetCode 226. 翻转二叉树 *
翻转一棵二叉树。测试用例示例:输入:输出:解题思路递归这是一道很经典的二叉树问题。显然,我们从根节点开始,递归地对树进行遍历,并从叶子结点先开始翻转。如果当前遍历到的节点 rootrootroot 的左右两棵子树都已经翻转,那么我们只需要交换两棵子树的位置,即可完成以 rootrootroot 为根节点的整棵子树的翻转。Code/** * Definition for a binary tree node. * public class TreeNode { * int原创 2020-09-16 18:35:29 · 101 阅读 · 0 评论 -
LeetCode 102. 二叉树的层次遍历 **
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。测试用例示例:二叉树:[1,2,3,4,null,6,7]返回其层次遍历结果:[[1],[2,3],[4,6,7]]解题思路广度优先搜索首先根元素入队当队列不为空的时候求当前队列sis_isi的长度依次从队列中取sis_isi个元素进行拓展,然后进入下一次迭代它和 BFS 的区别在于 BFS 每次只取一个元素拓展,而这里每次取sis_isi个元素。在上述过程中的第原创 2020-09-15 16:23:21 · 132 阅读 · 0 评论 -
LeetCode 20. 有效的括号 *
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。测试用例示例1:输入: “()”输出: true示例2:输入: “([{}])”输出: true示例3:输入: “)()[]{}”输出: false解题思路栈判断括号的有效性可以使用「栈」这一数据结构来解决。我们对给定的字符串 s 进行遍历,当我们遇到原创 2020-08-14 21:59:10 · 363 阅读 · 2 评论 -
LeetCode 43. 字符串相乘 **
给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。示例 1:测试用例示例:输入: num1 = “3”, num2 = “4”输出: “12”说明:num1 和 num2 的长度小于110。num1 和 num2 只包含数字 0-9。num1 和 num2 均不以零开头,除非是数字 0 本身。不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。解题思路乘法令 m原创 2020-08-14 20:44:41 · 141 阅读 · 1 评论 -
LeetCode 5. 最长回文子串 **
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。回文:字符串对称。“abba” "aba"测试用例示例1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例2:输入: “abbc”输出: “bb”解题思路动态规划对于一个子串而言,如果它是回文串,并且长度大于 2,那么将它首尾的两个字母去除之后,它仍然是个回文串。例如对于字符串 “ababa”,如果我们已经知道 “bab” 是回文串,那么 “ababa”原创 2020-08-12 22:06:34 · 146 阅读 · 0 评论 -
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解释:被围绕的区间不会存在于边界上,换句话说,任何边界上的 ‘O’ 都不会被填充为 ‘X’。 任何不在边界上,或不与边界上的 ‘O’ 相连的 ‘O’ 最终都会被填充为 ‘X’。如果两个元原创 2020-08-11 21:13:23 · 113 阅读 · 0 评论 -
LeetCode 696. 计数二进制子串 *
给定一个字符串 s,计算具有相同数量 0 和 1 的非空(连续)子字符串的数量,并且这些子字符串中的所有 0 和所有 1 都是组合在一起的。重复出现的子串要计算它们出现的次数。测试用例示例1:输入: “00110011”输出: 6解释: 有6个子串具有相同数量的连续1和0:“0011”,“01”,“1100”,“10”,“0011” 和 “01”。另外,“00110011”不是有效的子串,因为所有的0(和1)没有组合在一起。示例2:输入: “10101”输出: 4解释: 有4个子原创 2020-08-11 17:35:40 · 125 阅读 · 0 评论 -
LeetCode 93. 复原IP地址 **
给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。有效的 IP 地址正好由四个整数(每个整数位于 0 到 255之间组成),整数之间用 ‘.’ 分隔。测试用例示例:输入: “11101”输出: [“1.1.10.1”, “1.11.0.1”, “11.1.0.1”]解题思路IP 地址正好由四个整数(每个整数位于 0 到 255之间组成)。有效IP地址 4 - 12位,暴力三循环将IP地址位分成四个字段。即:[0, a), [a, a + b), [a + b, a + b原创 2020-08-09 21:35:28 · 192 阅读 · 0 评论 -
LeetCode 3. 无重复字符的最长子串 **
给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。测试用例示例 1:输入: “abcabcdb”输出: 4解释: 因为无重复字符的最长子串是 “abcd”,所以其长度为 4。示例 2:输入: “aaaaaaa”输出: 1解释: 因为无重复字符的最长子串是 “a”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子原创 2020-08-08 15:42:40 · 193 阅读 · 1 评论 -
LeetCode 2. 两整数相加(链表) **
给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。测试用例示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807解题思路本题我们只需要模拟逆向「竖式加法」的过程。将相同数位对齐,原创 2020-08-07 17:45:12 · 255 阅读 · 0 评论 -
LeetCode 100. 相同的二叉树 *
给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。测试用例示例 1:示例 2:解题思路深度优先遍历当两棵树的当前节点都为 null 时,返回 true当其中一个为 null 另一个不为 null 时,返回 false当两个都不为空但是值不相等时,返回 false当满足终止条件时进行返回,不满足时分别判断左子树和右子树是否相同时间复杂度:O(n),n 为树的节点个数Codeclass Solut原创 2020-08-07 15:16:04 · 205 阅读 · 0 评论 -
LeetCode 392. 判断子序列 *
给定字符串 s 和 t ,判断 s 是否为 t 的子序列。你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 <=100)。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。测试用例示例 1:s = "abc", t = "ahbgdc"返回 true.示例 2:s = "axc", t =原创 2020-08-05 21:29:25 · 125 阅读 · 0 评论 -
LeetCode 415. 字符串相加 *
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。提示:num1 和num2 的长度都小于 5100num1 和num2 都只包含数字 0-9num1 和num2 都不包含任何前导零你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式测试用例输入: "99" "1" 输出: "100"解题思路本题我们只需要对两个大整数模拟「竖式加法」的过程。将相同数位对齐,从低到高逐位相加,如果当前位和超过 10,则向高位进一位。定义原创 2020-08-05 19:08:58 · 130 阅读 · 1 评论 -
LeetCode 410. 分割数组的最大值 ***
给定一个非负整数数组和一个整数m,你需要将这个数组分成 m个非空的连续子数组。设计一个算法使得这 m 个子数组各自和的最大值最小。注意:数组长度 n 满足以下条件:1 ≤ n ≤ 10001 ≤ m ≤ min(50, n)测试用例输入: nums = [7,2,5,10,8] m = 2 输出: 18 解释: 一共有四种方法将nums分割为2个子数组。 其中最好的方式是将其分为[7,2,5] 和 [10,8], 因为此时这两个子数组各自的和的最大值为18,在所有情况中最原创 2020-07-28 21:18:50 · 183 阅读 · 1 评论 -
LeetCode 64. 最小(大)路径和 **
给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。测试用例:输入:[[1,3,1],[1,5,1],[4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。解题思路动态规划由于路径的方向只能是向下或向右,因此网格的第一行的每个元素只能从左上角元素开始向右移动到达,网格的第一列的每个元素只能从左上角元素开始向下移动到达,此时的路径是唯一的,因此每个元素对应的最小路径和即为原创 2020-07-28 19:46:51 · 782 阅读 · 0 评论 -
LeetCode 1. 两数之和 *
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 (LeetCode)解题思路保持数组中的每个元素与其索引相互对应的最好方法是什么?哈希表。使用了两次迭代。1、在第一次迭代中,我们将每个元素的值和它的索引添加到表中。2、在第二次迭代中,我们将检查每个元素所对应的目标元素(target - nums[i])是否存在于表中。注意,该目标元素不能是 nu原创 2020-07-26 22:20:52 · 104 阅读 · 1 评论 -
LintCode 8. 旋转字符串
题目给定一个字符串(以字符数组的形式给出)和一个偏移量,根据偏移量原地旋转字符串(从左向右旋转)。样例样例 1:输入: str=“abcdefg”, offset = 3输出: str = “efgabcd” 样例解释: 注意是原地旋转,即str旋转后为"efgabcd"样例 2:输入: str=“abcdefg”, offset = 0输出: str = “abcdef...原创 2019-09-23 10:23:26 · 392 阅读 · 0 评论 -
LintCode 2. 尾部的零
问题:设计一个算法,计算出n阶乘中尾部零的个数样例 1:输入: 11输出: 2 样例解释:11! = 39916800, 结尾的0有2个。挑战:O(logN)的时间复杂度解题思路:可以将每个数拆分成其素因子的乘积,可以发现,0是由2*5产生的,而5的数量一定小于2的数量,因此5的个数决定了结尾0的个数。只要计算n的阶乘中,5这个素因子出现多少次即可。Solution:p...原创 2019-09-20 10:01:23 · 145 阅读 · 0 评论 -
LintCode 82.落单的数
题目给出 2 * n + 1个数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字。样例 1:输入:[1,1,2,2,3,4,4]输出:3解释:仅3出现一次挑战一次遍历,常数级的额外空间复杂度解题思路异或位运算异或运算具有很好的性质,相同数字异或运算后为0,并且具有交换律和结合律,故将所有数字异或运算后即可得到只出现一次的数字。^是异或运算符,异或的规则是...原创 2019-09-20 10:48:24 · 140 阅读 · 0 评论