
leetcode刷题
TheManba
You can do anything you want to, if you really want it.
展开
-
leetcode 刷题(89)——221. 最大正方形
一、题目在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。示例:输入: 1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0输出: 4二、思路——动态规划一个正方形有四个顶点,我们以右下角的顶点为基准进行分析。从矩阵的左上角开始往右下角遍历,每遍历到一个位置,我们假设当前位置是正方形的右下角的顶点,这时我们就要检查之前遍历过的位置和当前位置能否组成正方形。那无非是要找正方形的另外三个点,这三个点分别在当前位置的上方、左方、以及左原创 2020-07-30 11:08:25 · 327 阅读 · 0 评论 -
leetcode 刷题(88)——53. 最大子序和
一、题目给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。二、思路——动态规划问题的核心在于找到和最大的连续子数组,子数组可以看成由起点和终点确定的一个区间,我们可以先确定其中一个点,然后去找另一个点。比如,我们先确定子数组的终点原创 2020-07-30 10:39:00 · 180 阅读 · 0 评论 -
leetcode 刷题(87)——64. 最小路径和
一、题目给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[ [1,3,1], [1,5,1], [4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。二、思路——动态规划我们要求的是从左上角到右下角的最小路径和。由于每次只能向下或者向右移动,所以到达右下角只能从它上边的位置或者左边的位置到达。也就是说,只要我们知道了右下角的上方位置的最小路径和和左原创 2020-07-30 10:10:22 · 268 阅读 · 0 评论 -
leetcode 刷题(86)——120. 三角形最小路径和
一、题目给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。例如,给定三角形:[ [2], [3,4], [6,5,7], [4,1,8,3]]自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。说明:如果你可以只使用 O(n) 的额外空间(n 为三角形的总行数)来解决这个问题,那么你的算法会很加分。二、思路——动态规划我们的目标是找出自顶向下的最小路径和。先分析两种简单的情况:如果三角形只有两层,如原创 2020-07-29 17:13:42 · 228 阅读 · 0 评论 -
leetcode 刷题(85)——88. 合并两个有序数组
一、题目给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3nums2 = [2,5,6], n = 3输出: [1,2,2,3,5,6]二、思路——双指原创 2020-07-02 16:48:26 · 207 阅读 · 0 评论 -
leetcode 刷题(84)——350.两个数组的交集 II
一、题目给定两个数组,编写一个函数来计算它们的交集。示例 1:输入: nums1 = [1,2,2,1], nums2 = [2,2]输出: [2,2]示例 2:输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出: [4,9]说明:输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。我们可以不考虑输出结果的顺序。二、思路及代码实现思路一:哈希映射统计一个数组中每个数字出现的次数,存放在 HashMap 中(以 值-出现次数原创 2020-06-29 20:16:25 · 7670 阅读 · 0 评论 -
leetcode 刷题(83)——371. 两整数之和
一、题目不使用运算符 + 和 - ,计算两整数 a 、b 之和。示例 1:输入: a = 1, b = 2输出: 3示例 2:输入: a = -2, b = 3输出: 1二、思路——位运算我们在手动计算加法时,主要有两部分:当前位的值和进位值。使用异或运算和与运算可以分别计算出这两部分内容。异或运算和与运算异或运算的结果相当于无进位加法,例如:a = 5 = 0101b = 4 = 0100a ^ b :0 1 0 10 1 0 0原创 2020-06-28 17:19:12 · 217 阅读 · 0 评论 -
leetcode刷题(82)——496. 下一个更大元素 I
一、题目给定两个没有重复元素的数组 nums1 和 nums2 ,其中 nums1 是 nums2 的子集。找到 nums1 中每个元素在 nums2 中的下一个比其大的值。nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出 -1 。示例 1:输入: nums1 = [4,1,2], nums2 = [1,3,4,2].输出: [-1,3,-1]解释: 对于num1中的数字4,你无法在第二个数组中找到下一个原创 2020-05-28 12:41:51 · 447 阅读 · 0 评论 -
leetcode刷题(81)——85. 最大矩形
一、题目给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。示例:输入:[ ["1","0","1","0","0"], ["1","0","1","1","1"], ["1","1","1","1","1"], ["1","0","0","1","0"]]输出: 6二、思路——单调栈利用 84. 柱状图中最大的矩形 来解决这道题。看下面的橙色部分,每一幅图都和 84 题是一样的。图片来自 详细通俗的思路分析,多解法因此,我们求出原创 2020-05-26 15:34:47 · 2282 阅读 · 0 评论 -
leetcode刷题(80)——84. 柱状图中最大的矩形
一、题目给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。示例:输入: [2,1,5,6,2,3]输出: 10二、思路及代码实现思路一:暴力法(超出时间限制)两个柱子之间的矩形面积由它们之间较矮的那个柱子决定。因此,我们可以考虑所有两两柱子之间的矩形面积,长即为两柱子之间较矮的那一个,宽即为两柱子之间的距离,最后找出最大值即可。参考代码:class Solution { public int原创 2020-05-26 10:41:17 · 650 阅读 · 0 评论 -
leetcode刷题(79)——42. 接雨水
一、题目给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。示例:输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6二、思路——动态规划我们的整体思路是:求出每一列能接的雨水,将所有列接的雨水加起来就是结果。下面我们分析怎么求每一列能接的雨水:如果当前原创 2020-05-25 16:34:27 · 350 阅读 · 0 评论 -
leetcode刷题(78)——23. 合并K个排序链表
一、题目合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[ 1->4->5, 1->3->4, 2->6]输出: 1->1->2->3->4->4->5->6二、思路及代码实现思路一:思路二:优先级队列建立优先级队列(使用最小堆),将所有链表的头元素入队;每次弹出一个最小的元素,并将该链表指针往后移;队列元素全部弹出时结束。参考代码:class Soluti原创 2020-05-25 14:48:05 · 228 阅读 · 0 评论 -
leetcode刷题(77)——312. 戳气球
一、题目有 n 个气球,编号为0 到 n-1,每个气球上都标有一个数字,这些数字存在数组 nums 中。现在要求你戳破所有的气球。每当你戳破一个气球 i 时,你可以获得 nums[left] * nums[i] * nums[right] 个硬币。 这里的 left 和 right 代表和 i 相邻的两个气球的序号。注意当你戳破了气球 i 后,气球 left 和气球 right 就变成了相邻的气球。求所能获得硬币的最大数量。说明:你可以假设 nums[-1] = nums[n] = 1,但注意它们原创 2020-05-25 09:34:17 · 608 阅读 · 0 评论 -
leetcode刷题(76)——15. 三数之和
一、题目给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例:给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]二、思路——排序+双指针总体思路:遍历数组,每次取一个元素 nums[i]nums[i]nums[i],再用双指针(左指原创 2020-05-23 21:48:42 · 214 阅读 · 0 评论 -
leetcode刷题(75)——98. 验证二叉搜索树
一、题目给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入: 2 / \ 1 3输出: true示例 2:输入: 5 / \ 1 4 / \ 3 6输出: false解释: 输入为: [5,1,4,null,null,3,6]。 根节点的值为 5原创 2020-05-23 20:46:03 · 265 阅读 · 0 评论 -
leetcode刷题(74)——31. 下一个排列
一、题目实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1二、思路思路分析:我们先理解一下 “下一个排列” 的定义:给定数字序列的字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(原创 2020-05-23 16:53:22 · 526 阅读 · 0 评论 -
leetcode刷题(73)——3. 无重复字符的最长子串
一、题目给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。原创 2020-05-23 09:59:17 · 225 阅读 · 0 评论 -
leetcode刷题(72)——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], target = 0输出: 4示例 2:输入: nums = [4,5,6,7,0,1,2], tar原创 2020-05-22 10:48:53 · 239 阅读 · 0 评论 -
leetcode刷题(71)——153. 寻找旋转排序数组中的最小值
一、题目假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请找出其中最小的元素。你可以假设数组中不存在重复元素。示例 1:输入: [3,4,5,1,2]输出: 1示例 2:输入: [4,5,6,7,0,1,2]输出: 0二、思路——二分法有序数组我们都可以尝试用二分法进行查找。原数组是升序的,旋转之后,数组可以分成两个升序的子数组。例如,数组 [0,1,2,4,5,6,7] 可能变原创 2020-05-22 10:05:51 · 214 阅读 · 0 评论 -
leetcode刷题(70)——55. 跳跃游戏
一、题目给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例 1:输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。示例 2:输入: [3,2,1,0,4]输出: false解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位置。二、思路原创 2020-05-20 14:43:02 · 380 阅读 · 0 评论 -
leetcode刷题(69)——152. 乘积最大子数组
一、题目给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。示例 1:输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。示例 2:输入: [-2,0,-1]输出: 0解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。二、思路这道题和leetcode 53.最大子序和相似,我们可以借鉴其思路:在最大子序和问题中,我们定义状态 dp[i] 表示“以第 i 个元素结尾的子数原创 2020-05-20 12:39:13 · 218 阅读 · 0 评论 -
leetcode刷题(68)——74. 搜索二维矩阵
一、题目编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列。每行的第一个整数大于前一行的最后一个整数。示例 1:输入:matrix = [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50]]target = 3输出: true示例 2:输入:matrix = [ [1, 3, 5, 7], [10, 11, 16, 20],原创 2020-05-19 18:48:55 · 379 阅读 · 0 评论 -
leetcode刷题(67)——79. 单词搜索
一、题目给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例:board =[ ['A','B','C','E'], ['S','F','C','S'], ['A','D','E','E']]给定 word = "ABCCED", 返回 true给定 word = "SEE", 返回 true给定 word = "ABCB",原创 2020-05-19 17:34:43 · 314 阅读 · 0 评论 -
leetcode刷题(66)——56. 合并区间
一、题目给出一个区间的集合,请合并所有重叠的区间。示例 1:输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:输入: [[1,4],[4,5]]输出: [[1,5]]解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。二、思路——排序按照区间的左端点进行排序,那么排序之后,能够合并的区间一定是连续的。比如[(1,9),(2,原创 2020-05-19 15:56:40 · 255 阅读 · 0 评论 -
leetcode刷题(65)——494.目标和
一、题目给定一个非负整数数组,a1, a2, …, an, 和一个目标数,S。现在你有两个符号 + 和 -。对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面。返回可以使最终数组和为目标数 S 的所有添加符号的方法数。示例 1:输入: nums: [1, 1, 1, 1, 1], S: 3输出: 5解释: -1+1+1+1+1 = 3+1-1+1+1+1 = 3+1+1-1+1+1 = 3+1+1+1-1+1 = 3+1+1+1+1-1 = 3一共有5种方法原创 2020-05-18 16:19:25 · 770 阅读 · 1 评论 -
leetcode刷题(64)——背包类动态规划问题
文章目录一、概述二、0-1 背包问题详细分析问题拆解:定义状态:推导状态转移方程:寻找边界条件:动态规划知识参考:Java数据结构与算法——动态规划一、概述背包问题是一类比较特殊的动态规划问题,我们还是使用之前提到的解动态规划问题的四个步骤来思考这类问题。背包类动态规划问题和其他的动态规划问题的不同之处在于,背包类动态规划问题会选用值来作为动态规划的状态,而我们之前讨论的动态规划问题,基本上都是利用数组或者字符串的下标来表示动态规划的状态。针对背包类问题,我们可以画表格来辅助我们思考问题。背包类原创 2020-05-14 09:43:42 · 1296 阅读 · 0 评论 -
leetcode刷题(63)——岛屿类问题通用解法
文章目录前言一、网格类问题的 DFS 遍历方法1、网格问题的基本概念2、DFS 的基本结构3、避免重复遍历二、例题——leetcode 题目例题一:200. 岛屿数量例题二:695. 岛屿的最大面积例题三:463. 岛屿的周长前言leetcode 中有一系列的岛屿类问题,这一类问题都可以使用 DFS(深度优先搜索) 方法来解决。我们所熟悉的 DFS 问题通常是在树或者图结构上进行的,而岛屿类 DFS 问题是在网格结构中进行的。岛屿类问题是网格 DFS 问题的典型代表,本文以岛屿类问题为例,展示网格类 D原创 2020-05-13 15:36:29 · 3865 阅读 · 0 评论 -
leetcode刷题(62)——300. 最长上升子序列
一、题目给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为 O(n2) 。进阶: 你能将算法的时间复杂度降低到 O(n log n) 吗?二、思路——动态规划(1)问题拆解:问题拆解就是看能否将原问题拆解为规模较小的子问题进行求解。对于长度为 n 的数原创 2020-05-12 16:44:17 · 213 阅读 · 0 评论 -
leetcode刷题(61)——394. 字符串解码
一、题目给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。示例:s = "3[a]2[bc]", 返回 "aaabcbc".s = "3[a2[c]原创 2020-05-12 13:17:26 · 635 阅读 · 0 评论 -
leetcode刷题(60)——122.买卖股票的最佳时机 II
一、题目给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。 随后,在第 4 天(股票价格 = 3)的时候买入,在第 5原创 2020-05-11 15:07:19 · 242 阅读 · 0 评论 -
leetcode刷题(59)——13. 罗马数字转整数
一、题目罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II原创 2020-05-11 13:08:45 · 162 阅读 · 0 评论 -
leetcode刷题(58)—— 202. 快乐数
一、题目编写一个算法来判断一个数 n 是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。如果 n 是快乐数就返回 True ;不是,则返回 False 。示例:输入:19输出:true解释:12 + 92 = 8282 + 22 = 6862 + 82 = 10012 + 02 + 02 = 1二、思路及代码实现按照规则进行计算原创 2020-05-11 09:50:11 · 267 阅读 · 0 评论 -
leetcode刷题(57)——50. Pow(x, n)
一、题目描述实现 pow(x, n) ,即计算 x 的 n 次幂函数。示例 1:输入: 2.00000, 10输出: 1024.00000示例 2:输入: 2.10000, 3输出: 9.26100示例 3:输入: 2.00000, -2输出: 0.25000解释: 2-2 = 1/22 = 1/4 = 0.25说明:-100.0 < x < 100.0n 是 32 位有符号整数,其数值范围是 [−231, 231 − 1] 。二、思路及代码实现快速幂 +原创 2020-05-11 09:05:18 · 193 阅读 · 0 评论 -
leetcode刷题(56)——108. 将有序数组转换为二叉搜索树
一、题目将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -10 5二、思路及代码实现二叉树的三种遍历方式分别为前序遍历、中序遍历和后序遍历,但是仅仅知道一种遍历序原创 2020-05-09 15:46:54 · 253 阅读 · 0 评论 -
leetcode刷题(55)——69. x 的平方根
一、题目实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。二、思路——二分查找设 x 的平方根为 a,则 a 是满足 k2≤xk^2 \leq xk2≤x 的最大 k 值。因此,我们可以对 k 进行二分查找,从而找到答案。原创 2020-05-09 14:35:20 · 241 阅读 · 0 评论 -
leetcode刷题(54)——560. 和为K的子数组
一、题目给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。示例 1 :输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。说明 :数组的长度为 [1, 20,000]。数组中元素的范围是 [-1000, 1000] ,且整数 k 的范围是 [-1e7, 1e7]。二、思路——哈希表我们定...原创 2020-05-07 19:43:06 · 233 阅读 · 0 评论 -
leetcode刷题(53)——309. 最佳买卖股票时机含冷冻期
一、题目给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。示例:输入: [1,2,3,0,2]输出: 3 解释: 对应的交易状态为: [买入, ...原创 2020-05-07 15:15:19 · 230 阅读 · 0 评论 -
leetcode刷题(52)——5. 最长回文子串
一、题目给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"二、思路及代码实现思路一:中心扩展法若回文串的长度为奇数,则回文串的中心位置是字符;若回文串的长度为偶数,则回文串的中心位置位于两个字符的中间。...原创 2020-05-06 19:45:37 · 227 阅读 · 0 评论 -
leetcode刷题(51)——19. 删除链表的倒数第N个节点
一、题目给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。进阶:你能尝试使用一趟扫描实现吗?二、思路整体思路:采用两个间隔为 n 的指针,同时向前移动。当前...原创 2020-05-06 18:39:24 · 119 阅读 · 0 评论 -
leetcode刷题(50)——17.电话号码的字母组合
一、题目给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:"23"输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].说明:尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。二、思路(来自 leetc...原创 2020-05-04 17:12:12 · 398 阅读 · 0 评论