LeetCode
算法
凉薄慕人
为了证明自己的价值而不断努力,但不再期待任何人的夸奖。
展开
-
145、二叉树的后序遍历
二叉树的后序遍历 题目描述 给定一个二叉树,返回它的 后序 遍历。 思路分析 记录遍历过的最后一个节点。当前节点不存在右节点或者右节点遍历过,则访问当前节点。代码如下: public List<Integer> postorderTraversal(TreeNode root) { List<Integer> list=new ArrayList<>()...原创 2020-03-02 13:58:31 · 161 阅读 · 0 评论 -
142、环形链表Ⅱ
环形链表Ⅱ 题目描述 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 说明:不允许修改给定的链表。 示例 1: 输入:head = [3,2,0,-4], pos = 1 输出:tail connects to node ...原创 2020-03-02 13:05:12 · 121 阅读 · 0 评论 -
141、环形链表
环形链表 题目描述 给定一个链表,判断链表中是否有环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 示例 1: 输入:head = [3,2,0,-4], pos = 1 输出:true 解释:链表中有一个环,其尾部连接到第二个节点。 示例 2: 输入:head = [1,2], pos = 0 ...原创 2020-03-01 13:48:45 · 119 阅读 · 0 评论 -
137、只出现一次的数字Ⅱ
只出现一次的数字Ⅱ 题目描述 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次。找出那个只出现了一次的元素。 说明: 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗? 示例 1: 输入: [2,2,3,2] 输出: 3 示例 2: 输入: [0,1,0,1,0,1,99] 输出: 99 思路分析 三个相同数字与的结果数字在各位上都是3的倍数。由此将所有数做...原创 2020-03-01 13:26:49 · 149 阅读 · 0 评论 -
136、只出现一次的数字
只出现一次的数字 题目描述 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 说明: 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗? 示例 1: 输入: [2,2,1] 输出: 1 示例 2: 输入: [4,1,2,1,2] 输出: 4 思路分析 位运算:两个相同的数字异或的结果为0,则将所有数字异或,最后的结果就是只出现一次...原创 2020-02-29 16:06:36 · 113 阅读 · 0 评论 -
125、验证回文串
验证回文串 题目描述 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。 说明:本题中,我们将空字符串定义为有效的回文串。 示例 1: 输入: “A man, a plan, a canal: Panama” 输出: true 示例 2: 输入: “race a car” 输出: false 思路分析 先将字符串转化成小写字符串,再通过双指针遍历,遍历过程中若不是数字...原创 2020-02-29 15:21:52 · 76 阅读 · 0 评论 -
118、杨辉三角
杨辉三角 题目描述 给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。 在杨辉三角中,每个数是它左上方和右上方的数的和。 示例: 输入: 5 输出: [ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1] ] 思路分析 建立两个数组分别为上一个数组跟当前数组,根据上一个数组一直更新当前数组。代码如下: public List<List...原创 2020-02-29 14:08:28 · 68 阅读 · 0 评论 -
114、二叉树展开为链表
二叉树展开为链表 题目描述 给定一个二叉树,原地将它展开为链表。 例如,给定二叉树 1 / 2 5 / \ 3 4 6 将其展开为: 1 2 3 4 5 6 思路分析 由题意得,展开后从根节点至叶节点为先序遍历。因此通过先序遍历并保存序列节点,再展开。代码如下: public void flatten(TreeNode root) { if (root==...原创 2020-02-29 13:19:16 · 112 阅读 · 0 评论 -
110、平衡二叉树
平衡二叉树 题目描述 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。 示例 1: 给定二叉树 [3,9,20,null,null,15,7] 3 / 9 20 / 15 7 返回 true 。 思路分析 思路一:从根节点判断左右子树高度是否相差超过1。从顶点到叶节点遍历存在重复计算。代...原创 2020-02-28 18:14:47 · 90 阅读 · 0 评论 -
104、二叉树的最大深度
二叉树的最大深度 题目描述 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 3 / 9 20 / 15 7 返回它的最大深度 3 。 思路分析 思路一:二叉树的最大深度等于左子树与右子树中最大深度加一。以此类推,可以用递归实现。代...原创 2020-02-27 13:07:30 · 61 阅读 · 0 评论 -
103、二叉树的锯齿形层次遍历
二叉树的锯齿形层次遍历 题目描述 给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 例如: 给定二叉树 [3,9,20,null,null,15,7], 3 / 9 20 / 15 7 返回锯齿形层次遍历如下: [ [3], [20,9], [15,7] ] 思路分析 由锯齿形层次遍历,可以通过两个栈分别...原创 2020-02-26 20:34:47 · 98 阅读 · 0 评论 -
102、二叉树的层次遍历
二叉树的层次遍历 题目描述 给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / 9 20 / 15 7 返回其层次遍历结果: [ [3], [9,20], [15,7] ] 思路分析 在基于队列实现的层次遍历的基础上,通过变量记录当前层剩余的节点个数和下一层节点的个数实现分层遍...原创 2020-02-26 20:13:32 · 73 阅读 · 0 评论 -
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 思路分析 通过递归来实现。代码如下: public boolean isSym...原创 2020-02-26 19:59:10 · 77 阅读 · 0 评论 -
88、合并两个有序数组
合并两个有序数组 题目描述 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。 示例: 输入: nums1 = [1,2,3,0,0,0], m =...原创 2020-02-26 19:36:01 · 79 阅读 · 0 评论 -
83、删除排序链表中的重复元素
删除排序链表中的重复元素 题目描述 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。 示例 1: 输入: 1->1->2 输出: 1->2 示例 2: 输入: 1->1->2->3->3 输出: 1->2->3 思路分析 通过双指针,遍历整个链表。指针p指向最近一个不重复的元素,指针q寻找下一个不重复的元素。代码如下: publi...原创 2020-02-26 16:45:38 · 114 阅读 · 0 评论 -
77、组合
组合 题目描述 给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。 示例: 输入: n = 4, k = 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] 思路分析 通过回溯法实现。代码如下: List<List<Integer>> resList=new LinkedList<>()...原创 2020-02-26 16:27:55 · 70 阅读 · 0 评论 -
70、爬楼梯
爬楼梯 题目描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 示例 1: 输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶。 1 阶 + 1 阶 2 阶 示例 2: 输入: 3 输出: 3 解释: 有三种方法可以爬到楼顶。 1 阶 + 1 阶 + 1 阶 1 阶 + 2 阶 2 ...原创 2020-02-26 15:41:27 · 77 阅读 · 0 评论 -
69、x的平方根
x的平方根 题目描述 实现 int sqrt(int x) 函数。 计算并返回 x 的平方根,其中 x 是非负整数。 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。 示例 1: 输入: 4 输出: 2 示例 2: 输入: 8 输出: 2 说明: 8 的平方根是 2.82842…, 由于返回类型是整数,小数部分将被舍去。 思路分析 利用二分法实现sqrt函数,需要考虑溢出的问题,所以x...原创 2020-02-26 15:36:00 · 69 阅读 · 0 评论 -
67、二进制求和
二进制求和 题目描述 给定两个二进制字符串,返回他们的和(用二进制表示)。 输入为非空字符串且只包含数字 1 和 0。 示例 1: 输入: a = “11”, b = “1” 输出: “100” 示例 2: 输入: a = “1010”, b = “1011” 输出: “10101” 思路分析 模拟二进制加法的过程,通过转换成字符串进行处理。代码如下: public static String a...原创 2020-02-26 14:45:54 · 85 阅读 · 0 评论 -
66、加一
加一 题目描述 给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外,这个整数不会以零开头。 示例 1: 输入: [1,2,3] 输出: [1,2,4] 解释: 输入数组表示数字 123。 示例 2: 输入: [4,3,2,1] 输出: [4,3,2,2] 解释: 输入数组表示数字 4321。...原创 2020-02-24 22:29:45 · 65 阅读 · 0 评论 -
58、最后一个单词的长度
最后一个单词的长度 题目描述 给定一个仅包含大小写字母和空格 ’ ’ 的字符串 s,返回其最后一个单词的长度。 如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。 如果不存在最后一个单词,请返回 0 。 说明:一个单词是指仅由字母组成、不包含任何空格的 最大子字符串。 示例: 输入: “Hello World” 输出: 5 思路分析 用split按空格分隔字符串,然后从最后一个字符串...原创 2020-02-24 22:07:06 · 85 阅读 · 0 评论 -
54、螺旋矩阵
螺旋矩阵 题目描述 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。 示例 1: 输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] 输出: [1,2,3,6,9,8,7,4,5] 示例 2: 输入: [ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12] ] 输出: [1...原创 2020-02-24 21:49:54 · 69 阅读 · 0 评论 -
53、最大子序和
最大子序和 题目描述 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 思路分析 建议辅助数组A,A[i]的定义为以nums[i]为结尾的最大子序和。更新辅助数组的方式如下:若A[i-1]<0,则A[...原创 2020-02-24 21:23:00 · 74 阅读 · 0 评论 -
46、全排列
全排列 题目描述 给定一个没有重复数字的序列,返回其所有可能的全排列。 示例: 输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ] 思路分析 可以分为两个步骤:步骤一,把字符串分为第一个字符和后面一部分字符串,确定第一个字符。步骤二,固定第一个字符,给后面的字符串再作全排列。通过递归实现,代码如下: pu...原创 2020-02-24 19:27:29 · 52 阅读 · 0 评论 -
38、外观数列
外观数列 题目描述 「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。前五项如下: 1 11 21 1211 111221 1 被读作 “one 1” (“一个一”) , 即 11。 11 被读作 “two 1s” (“两个一”), 即 21。 21 被读作 “one 2”, “one 1” (“一个二” , “一个一”) ,...原创 2020-02-24 18:31:03 · 92 阅读 · 0 评论 -
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 输出...原创 2020-02-23 13:59:59 · 63 阅读 · 0 评论 -
27、移除元素
移除元素 题目描述 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 示例 1: 给定 nums = [3,2,2,3], val = 3, 函数应该返回新的长度 2, 并且 nums...原创 2020-02-23 13:27:39 · 115 阅读 · 0 评论 -
26、删除排序数组中的重复项
删除排序数组中的重复项 题目描述 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 示例 1: 给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需要考虑数组中超出新长度后面的元...原创 2020-02-22 15:50:54 · 82 阅读 · 0 评论 -
23、合并K个排序链表
合并K个排序链表 题目描述 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 示例: 输入: [ 1->4->5, 1->3->4, 2->6 ] 输出: 1->1->2->3->4->4->5->6 思路分析 合并K个排序链表,可以先合并前K/2个的链表,再合并后K/2个的链表。同理类似的处理前K/2个...原创 2020-02-22 15:35:10 · 86 阅读 · 0 评论 -
21、合并两个有序链表
合并两个有序链表 题目描述 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 思路分析 分别遍历两个链表,比较遍历的两个元素大小,将较小的元素插入到新链表中。直至有一链表遍历完成,直接拼接剩下未遍历的链表。代码如下...原创 2020-02-22 15:01:38 · 81 阅读 · 0 评论 -
20、有效的括号
有效的括号 题目描述 给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 示例 1: 输入: “()” 输出: true 示例 2: 输入: “()[]{}” 输出: true 示例 3: 输入: “(]” 输出: false 示例 ...原创 2020-02-22 14:40:55 · 61 阅读 · 0 评论 -
19、删除链表的倒数第N个节点
删除链表的倒数第N个节点 题目描述 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5. 思路分析 解法一:先遍历链表得到链表长度length,求倒数第N个节点即求正数第length-n+1个节点。再遍历链表删除...原创 2020-02-22 14:23:17 · 94 阅读 · 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] ] 思路分析 先排序数组...原创 2020-02-21 16:18:30 · 70 阅读 · 0 评论 -
14、最长公共前缀
最长公共前缀 题目描述 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 “”。 示例 1: 输入: [“flower”,“flow”,“flight”] 输出: “fl” 示例 2: 输入: [“dog”,“racecar”,“car”] 输出: “” 解释: 输入不存在公共前缀。 思路分析 遍历字符串数组,先求出前两个字符串的公共前缀,再根据这个公共前缀求出与第...原创 2020-02-21 15:42:26 · 68 阅读 · 0 评论 -
13、罗马数字转整数
罗马数字转整数 题目描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ...原创 2020-02-21 15:13:35 · 60 阅读 · 0 评论 -
10、正则表达式匹配
正则表达式匹配 题目描述 请实现一个函数用来匹配包括’.‘和’*‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 '’ 的正则表达式匹...原创 2020-02-21 14:54:45 · 108 阅读 · 0 评论 -
9、回文数
回文数 题目描述 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。 示例 3: 输入: 10 输出: false 解释: 从右向左读, 为 01 。因此它不是一个回文数。...原创 2020-02-20 16:25:40 · 105 阅读 · 0 评论 -
7、整数反转
整数反转 题目描述 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。 示例 1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出: 21 思路分析 解法一:首先想到转换成字符串进行处理。需要注意反转后前几位为0、整数反转后溢出的情况。代码如下: public int reverse(int x) { ...原创 2020-02-20 15:21:23 · 77 阅读 · 0 评论 -
5、最长回文子串
最长回文子串 题目描述 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1: 输入: “babad” 输出: “bab” 注意: “aba” 也是一个有效答案。 示例 2: 输入: “cbbd” 输出: “bb” 思路分析 动态规划:给出 P(i,j)P(i,j) 的定义如下:P(i,j)表示子串S_i…S_j是否为回文子串。P(i, j) = ( ...原创 2020-02-20 14:32:16 · 70 阅读 · 0 评论 -
3、无重复字符的最长子串
无重复字符的最长子串 题目描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2: 输入: “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。 示例 3: 输入: “pwwkew” 输出: 3 解释: 因为无重复...原创 2020-02-19 21:49:14 · 101 阅读 · 0 评论