LeetCode
lwycc233
坚持总会有回报!
展开
-
leetcode 10 正则表达式匹配 && 44 通配符匹配 (动态规划解法)
这两题类似,现都采用动态规划方法解决10. 正则表达式匹配Difficulty: 困难给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配。'.' 匹配任意单个字符'*' 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 **整个 **字符串 s的,而不是部分字符串。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。示例 1:输入:s = "aa"p = "a"原创 2020-06-28 21:52:09 · 225 阅读 · 0 评论 -
268. 缺失数字
题目给定一个包含 0, 1, 2, …, n 中 n 个数的序列,找出 0 … n 中没有出现在序列中的那个数。示例 1:输入: [3,0,1]输出: 2示例 2:输入: [9,6,4,2,3,5,7,0,1]输出: 8思路使用异或运算异或运算是一个数学与算符,应用于逻辑运算,是一个二进制运算1 ^ 1 = 0; 1 ^ 0 = 1;相同为0, 不同为1代码cl...原创 2019-08-09 15:33:12 · 96 阅读 · 0 评论 -
5. 最长回文子串
题目给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"动态规划解法建立一个二维数组d,令d[j][i]表示s[j...i] = true是回文字符串,用其等于false则表示不是回文子串由上面的定义就...原创 2019-08-13 13:44:26 · 85 阅读 · 0 评论 -
258. 各位相加
题目给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。示例:输入: 38输出: 2 解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2。 由于 2 是一位数,所以返回 2。思路最后结果一位数的话,一定是mod 9的余数代码class Solution { public int addDigits(int num) { ...原创 2019-08-08 10:01:59 · 80 阅读 · 0 评论 -
225. 用队列实现栈
题目使用队列实现栈的下列操作:push(x) -- 元素 x 入栈pop() -- 移除栈顶元素top() -- 获取栈顶元素empty() -- 返回栈是否为空注意:你只能使用队列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 is empty 这些操作是合法的。你所使用的语言也许不支持队列。 你可以使用 list ...原创 2019-07-30 14:46:11 · 96 阅读 · 0 评论 -
204. 计数质数
题目统计所有小于非负整数 n 的质数的数量。示例:输入: 10输出: 4解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。思路使用厄拉多筛选法,如果判断一个数为质数,那它的倍数都不是质数注意:java中数组的定义 boolean[] p = new boolean[n]; 气死了,这个都不会!!!!!代码class Solution { p...原创 2019-07-17 10:12:28 · 79 阅读 · 0 评论 -
197. 上升的温度
题目给定一个 Weather 表,编写一个 SQL 查询,来查找与之前(昨天的)日期相比温度更高的所有日期的 Id。+---------+------------------+------------------+| Id(INT) | RecordDate(DATE) | Temperature(INT) |+---------+------------------+----------...原创 2019-07-16 09:56:52 · 106 阅读 · 0 评论 -
182. 查找重复的电子邮箱
题目SQL架构编写一个 SQL 查询,查找 Person 表中所有重复的电子邮箱。示例:+----+---------+| Id | Email |+----+---------+| 1 | a@b.com || 2 | c@d.com || 3 | a@b.com |+----+---------+根据以上输入,你的查询应返回以下结果:+---------+...原创 2019-07-15 11:07:27 · 279 阅读 · 0 评论 -
190. 颠倒二进制位
题目颠倒给定的 32 位无符号整数的二进制位。示例 1:输入: 00000010100101000001111010011100输出: 00111001011110000010100101000000解释: 输入的二进制串 00000010100101000001111010011100 表示无符号整数 43261596, 因此返回 964176192,其二进制表示形式为 0...原创 2019-06-30 09:06:50 · 102 阅读 · 0 评论 -
169. 求众数
给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在众数。示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2我的思路使用HashMap存储出现的个数一旦有个数大于一半数出现的时候就,返回该值代码class Solution {...原创 2019-05-31 11:38:32 · 98 阅读 · 0 评论 -
235. 二叉搜索树的最近公共祖先
题目给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]示例 1:输入: root = [...原创 2019-08-07 13:50:41 · 89 阅读 · 0 评论 -
242. 有效的字母异位词
题目给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例 1:输入: s = "anagram", t = "nagaram"输出: true示例 2:输入: s = "rat", t = "car"输出: false说明:你可以假设字符串只包含小写字母。思路只需要比较两个字符串中的左右字符是否相同代码class Solution {...原创 2019-08-07 14:20:25 · 71 阅读 · 0 评论 -
12. 整数转罗马数字
题目罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 ...原创 2019-08-15 10:56:41 · 88 阅读 · 0 评论 -
36. 有效的数独
题目判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。上图是一个部分填充的有效的数独。数独部分空格内已填入了数字,空白格用 ‘.’ 表示。示例 1:输入:[ ["5","3",".",".","7","."...原创 2019-09-09 10:12:07 · 89 阅读 · 0 评论 -
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], ...原创 2019-09-08 15:41:28 · 102 阅读 · 0 评论 -
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], t...原创 2019-09-06 11:11:55 · 89 阅读 · 0 评论 -
31. 下一个排列
题目实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1代码class Solution { pu...原创 2019-09-04 10:41:47 · 103 阅读 · 0 评论 -
24. 两两交换链表中的节点
题目给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4, 你应该返回 2->1->4->3.思路使用三个指针x,y,zx指向要交换的第一个结点y指向要交换的第二个结点z指向x的上一个结点,使得交换后的结点可以和前面的连起来代码/**...原创 2019-08-29 09:47:31 · 86 阅读 · 0 评论 -
22. 括号生成
题目给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出 n = 3,生成结果为:[ "((()))", "(()())", "(())()", "()(())", "()()()"]思路使用回溯法当左括号的个数等于n ,并且右括号的个数等于n的时候,就是终止条件,同时将此事的字符串添加到列表中只有当左括号的...原创 2019-08-28 12:42:16 · 77 阅读 · 0 评论 -
19. 删除链表的倒数第N个节点
题目给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。思路...原创 2019-08-28 12:23:53 · 91 阅读 · 0 评论 -
18. 四数之和
题目给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。示例:给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求的四元组集合为:...原创 2019-08-27 14:18:28 · 107 阅读 · 0 评论 -
16. 最接近的三数之和
题目给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).代码class Solution {...原创 2019-08-26 09:49:30 · 111 阅读 · 0 评论 -
15. 三数之和
题目给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]思路一般要求结果...原创 2019-08-26 09:05:12 · 102 阅读 · 0 评论 -
168. Excel表列名称
题目给定一个正整数,返回它在 Excel 表中相对应的列名称。例如,1 -> A2 -> B3 -> C...26 -> Z27 -> AA28 -> AB ...示例 1:输入: 1输出: "A"示例 2:输入: 28输出: "AB"示例 3:输入: 701输出: "ZY"思路类比10进制:10进制一轮有10...原创 2019-05-31 10:41:57 · 96 阅读 · 0 评论 -
167. 两数之和 II - 输入有序数组
题目给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。说明:返回的下标值(index1 和 index2)不是从零开始的。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。示例:输入: numbers = [2, 7, 11, 15], ta...原创 2019-05-31 09:29:31 · 111 阅读 · 0 评论 -
107. 二叉树的层次遍历 II
题目给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其自底向上的层次遍历为:[ [15,7], [9,20], [3]]思路利用队列的先进先出的原则,一层...原创 2019-05-24 09:49:25 · 88 阅读 · 0 评论 -
67. 二进制求和
题目给定两个二进制字符串,返回他们的和(用二进制表示)。输入为非空字符串且只包含数字 1 和 0。示例 1:输入: a = "11", b = "1"输出: "100"示例 2:输入: a = "1010", b = "1011"输出: "10101"思路将字符串转换成字符串数组逢2进1char转化成int,要减48代码class Solution { ...原创 2019-05-22 10:02:05 · 131 阅读 · 0 评论 -
前、中、后序,迭代写法的模板!
前、中、后序,迭代写法的模板!while( p 非空 || 栈非空 ){ if( p 非空 ){ } else{ }}原创 2019-05-11 17:04:38 · 249 阅读 · 1 评论 -
leecde-栈-173. 二叉搜索树迭代器
题目实现一个二叉搜索树迭代器。你将使用二叉搜索树的根节点初始化迭代器。调用 next() 将返回二叉搜索树中的下一个最小的数。示例:BSTIterator iterator = new BSTIterator(root);iterator.next(); // 返回 3iterator.next(); // 返回 7iterator.hasNext(); // 返回 tr...原创 2019-05-10 11:13:15 · 120 阅读 · 0 评论 -
leecde-栈-150. 逆波兰表达式求值
题目根据逆波兰表示法,求表达式的值。有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例 1:输入: ["2", "1", "+", "3", "*"]输出: 9解释: ((2 + 1) * 3) = 9示例 2:...原创 2019-05-10 10:19:47 · 66 阅读 · 0 评论 -
leecde-栈-144. 二叉树的前序遍历
题目给定一个二叉树,返回它的 前序 遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,2,3]进阶: 递归算法很简单,你可以通过迭代算法完成吗?递归写法/** * Definition for a binary tree node. * public class TreeNode { * int...原创 2019-05-10 09:36:26 · 127 阅读 · 0 评论 -
leecde-栈-103. 二叉树的锯齿形层次遍历(不会写的题)
题目给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回锯齿形层次遍历如下:[ [3], [20,9], [15,7]]思路让每个点都带有层数每...原创 2019-05-09 21:13:30 · 83 阅读 · 0 评论 -
leecde-栈-94. 二叉树的中序遍历(不会写的题)
题目给定一个二叉树,返回它的中序 遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3输出: [1,3,2]进阶: 递归算法很简单,你可以通过迭代算法完成吗?递归写法/** * Definition for a binary tree node. * public class TreeNode { * int val...原创 2019-05-09 20:33:35 · 163 阅读 · 0 评论 -
leetcode-栈-71. 简化路径
题目以 Unix 风格给出一个文件的绝对路径,你需要简化它。或者换句话说,将其转换为规范路径。在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (…) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。更多信息请参阅:Linux / Unix中的绝对路径 vs 相对路径请注意,返回的规范路径必须始终以斜杠 / 开头,并且两个目录名之间必须只有...原创 2019-05-09 19:59:49 · 85 阅读 · 0 评论 -
leetcode-栈-155. 最小栈
题目设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x) – 将元素 x 推入栈中。pop() – 删除栈顶的元素。top() – 获取栈顶元素。getMin() – 检索栈中的最小元素。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);m...原创 2019-05-09 19:55:10 · 85 阅读 · 0 评论 -
leetcode-栈-20. 有效的括号
题目给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true示例 2:输入: "()[]{}"输出: true示例 3:输入: "(]"输出: false示例 4:输入...原创 2019-05-09 10:06:33 · 96 阅读 · 0 评论 -
69. x 的平方根
题目实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。思路使用二分法上界是 x/2+1代码//1.使用...原创 2019-05-22 10:03:41 · 123 阅读 · 0 评论 -
70. 爬楼梯
题目假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 ...原创 2019-05-22 10:09:58 · 103 阅读 · 0 评论 -
83. 删除排序链表中的重复元素
题目给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:输入: 1->1->2输出: 1->2示例 2:输入: 1->1->2->3->3输出: 1->2->3思路排序链表,只需要判断当前节点的值和前一个节点的值是否相同即可。需要两个指针,一个指向当前节点,另一个指向当前节点的上一个节点。如果相同...原创 2019-05-22 10:13:01 · 108 阅读 · 0 评论 -
104. 二叉树的最大深度
题目给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度 3 。思路just 递归代码/** * Definition for a bin...原创 2019-05-24 09:39:01 · 110 阅读 · 0 评论