- 博客(121)
- 收藏
- 关注
原创 LeetCode 第91题:解码方法
给你一个只含数字的非空字符串s,请计算并返回解码方法的总数。如果没有合法的方法解码整个字符串,返回0。要特别注意,11106可以映射为AAJF或KJF。一条包含字母A-Z的消息通过以下映射进行了编码。动态规划,分为一个字符和两个字符两种情况。06不是一个合法编码。
2025-07-05 17:46:28
356
原创 LeetCode 第82题:删除排序链表中的重复元素Ⅱ
给定一个已排序的链表的头head,删除原始链表中所有重复数字的节点,只留下不同的数字,返回已排序的链表。
2025-07-03 21:45:37
159
1
原创 第81题:搜索旋转排序数组Ⅱ
在传递给函数之前,nums在预先未知的某个下标k(0<=k<nums.length)上进行了旋转,使数组变为nums[k],nums[k+1],......nums[n-1],nums[0],nums[1],......nums[k-1](下标从0开始计数)。给你旋转后的数组nums和一个整数target,请你编写一个函数来判断给定的目标值是否存在于数组中,如果nums中存在这个目标值target,则返回true,否则返回false。已知存在一个按非降序排列的整数数组nums,数组中的值不必互不相同。
2025-06-30 22:02:24
171
原创 LeetCode 第80题 删除有序数组中的重复项Ⅱ
摘要:题目要求对有序数组原地去重,保留最多两个重复元素。使用双指针方法,慢指针slow跟踪处理位置,快指针fast遍历数组。当nums[slow-2]≠nums[fast]时保留元素。时间复杂度O(n),空间复杂度O(1)。示例:[1,1,1,2,2,3]处理后长度为5,数组变为[1,1,2,2,3]。该方法高效地修改原数组,适用于升序排列的输入。
2025-06-29 21:56:46
353
原创 LeetCode 第78题:子集
迭代法实现子集枚举:记录序列中元素的总数为n,原序列中的每个数字ai的状态可能有两种,在子集中和不在子集中。用1代表在子集中,0代表不在子集中。每一个子集可以对应一个长度为n的0/1序列,第i位表示ai是否在子集中。枚举mask∈【0,2^n-1】,mask的二进制表示一个0/1序列,按照这个0/1序列在原集合当中取数。给你一个整数数组nums,数组中的元素互不相同。返回该数组所有可能的子集。0/1 序列 子集 0/1 序列对应的二进制数。子集数量一共是2^n个,包括空集和本身集合。
2025-06-15 15:32:11
243
原创 LeetCode 第75题:颜色分类
给定一个包含红色、白色和蓝色、共n个元素的数组nums,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排序。第二次遍历中,将数组中所有的1交换到头部的0之后。时间复杂度:O(n),其中n是数组nums的长度。在第一次遍历中,将数组中所有的0交换到数组头部。时间复杂度:O(n),其中n是数组nums的长度。时间复杂度:O(n),其中n是数组nums的长度。使用整数0、1和2分布表示红色、白色和蓝色。空间复杂度:O(1)空间复杂度:O(1)空间复杂度:O(1)
2025-06-15 14:11:33
325
原创 LeetCode 第74题:搜索二维矩阵
若将矩阵每一行拼接在上一行的末尾,则会得到一个升序数组,可以在该数组上二分找到目标元素。给你一个整数target,如果target在矩阵中,返回true;否则返回false。给你一个满足下述两条属性的m*n整数矩阵。
2025-06-14 16:45:24
521
原创 LeetCode 第73题:矩阵置零
中,一个原地算法(in-place algorithm)是一种使用小的,固定数量的额外之空间来转换资料的算法。当算法执行时,输入的资料通常会被要输出的部分覆盖掉。不是原地算法有时候称为非原地(not-in-place)或不得其所(out-of-place)。空间复杂度:O(m+n),其中 m 是矩阵的行数,n 是矩阵的列数。给定一个m*n的矩阵,如果一个元素为0,则将其所在行和列的所有元素都设为0,请使用原地算法。时间复杂度:O(mn),其中 m 是矩阵的行数,n 是矩阵的列数。
2025-06-14 16:20:06
502
原创 LeetCode 第72题:编辑距离(巧妙的动态规划方法)
2.自顶向下的递推法,从终点状态开始调用递归,扫描所有必需的状态空间,只需要填一部分的动态规划表,有些不必要的状态可以直接避免计算。记忆化递归的平均时间复杂度O(M*N),但是时间常数项比递推填表的要小一半,速度更快,极端情况下,记忆化递归的时间复杂度可以将为O(N)但是空间复杂度不能优化,为O(M*N)。1.自底向上的递推法,从起点状态开始扫描,输出值为终点状态值,需要填整个动态规划状态表,尽管不是所有的状态都对终点状态的计算有直接贡献,有些状态其实没有必要计算。
2025-06-14 16:00:44
645
原创 LeetCode 第71题 简化路径(繁琐)
对于【两个点】或者【目录名】,我们则可以用一个栈来维护路径中的每一个目录名。当我们遇到【两个点】时,需要将目录切换到上一级,因此只要栈不为空,就弹出栈顶的目录。栈:首先将给定的字符串path根据 / 分割成一个由若干字符串组成的列表,记为names。对于【空字符串】以及【一个点】,实际上无需对他们进行处理,因为【空字符串】没有任何含义,而【一个点】表示当前目录本身,无需切换目录。给你一个字符串path,表示指向某一文件或目录的Unix风格 绝对路径(以‘/’开头),请你将其转化为更加简洁的规范路径。
2025-06-14 14:43:08
754
原创 LeetCode 第64题 最小路径和
给定一个包含非负整数m*n网格grid,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。
2025-06-14 14:00:35
220
原创 LeetCode 第62题~第63题路径问题
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。动态规划:dp[m][n]=dp[m-1][n]+dp[m][n-1]网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。返回机器人能够到达右下角的不同路径数量。机器人的移动路径中不能包含。网格中的障碍物和空位置分别用。问总共有多少条不同的路径?测试用例保证答案小于等于。
2025-05-19 15:33:23
381
原创 LeetCode 第54~55题
给你一个非负整数数组nums,你最初位于数组的第一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标,如果可以,返回true,否则返回false。给你一个m行n列的矩阵matrix,请你按照顺时针螺旋顺序,返回矩阵中的所有元素。
2025-04-16 14:29:16
414
原创 LeetCode 第53题:最大子数组和
给你一个整数数组nums,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组是数组中的一个连续部分。
2025-04-08 16:08:39
401
原创 LeetCode 第50题:Pow(x,n)
如何快速计算x的13次幂,13=1+4+8,13的二进制为1101,遇到1就乘以x的对应次幂。遍历<样例通过,但是部分测试样例会超时,294 / 307 个通过的测试用例>实现pow(x,n),即计算x的整数n次幂函数(即x^n)。
2025-04-08 15:46:54
284
原创 LeetCode 第47题:旋转数组
matrix[row][col]经过水平轴翻转变为matrix[n-row-1][col],再经过主对角线翻转得到matrix[col][n-row-1]。对于矩阵中的元素matrix[row][col]在旋转后,它的新位置为matrix[col][n-row-1]。matrix[row][col]经过水平轴翻转变为matrix[n-row-1][col]matrix[row][col]经过主对角线翻转变为matrix[col][row]旋转图像,这意味着你需要直接修改输入的二维矩阵。
2025-04-08 14:14:59
862
原创 LeetCode 第45题
每个元素nums[i]表示从索引i向前跳转的最大长度。目标是到达数组的最后一个位置,因此可以考虑最后一步跳跃前所在的位置,该位置通过跳跃能够到达最后一个位置。返回到达nums[n-1]的最小跳跃次数。生成的测试用例可以到达nums[n-1]。给定一个长度为n的0索引整数数组nums,初始位置为nums[0]。
2025-04-08 11:42:23
340
原创 LeetCode 第41~43题
个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。,请你找出其中没有出现的最小的正整数。并且只使用常数级别额外空间的解决方案。的乘积,它们的乘积也表示为字符串形式。给定两个以字符串形式表示的非负整数。给你一个未排序的整数数组。请你实现时间复杂度为。
2025-04-07 13:59:05
332
原创 LeetCode 第38~40题(难度较高--建议重复阅读)
给你一个无重复元素的整数数组candidates和一个目标整数target,找出candidates中可以使数字和为目标数target的所有不同组合,并以列表形式返回。如果至少一个数字的被选数量不同,则两种组合是不同的。对于给定的输入,保证和为target的不同组合数少于150个。给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。【外观数列】是一个整数序列,从数字1开始,序列中的每一项都是对前一项的描述。
2025-03-27 17:28:02
1192
2
原创 LeetCode 第36、37题(数独问题)
请你判断一个9*9的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。时间复杂度:O(1),因为是固定大小的9*9网格。数独部分空格内已填入了数字,空白格用‘.’表示。空间复杂度:O(1),使用固定大小的哈希表。编写一个程序,通过填充空格来解决数独问题。
2025-03-27 12:23:43
543
原创 LeetCode 第34、35题
题目描述给你一个按照非递减顺序排列的整数数组nums,和一个目标值target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值target,返回[-1,1]。你必须设计并实现时间复杂度为为O(log n)的算法解决此问题。难度:中等题目链接34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣(LeetCode)输入:nums = [5,7,7,8,8,10], target = 8输出:[3,4]输入:nums = [5,7,7,8,8,10], target = 6。
2025-03-26 15:42:36
589
原创 LeetCode 第31~33题
整数数组的一个排列就是将所有成员以序列或线性顺序排列。例如arr=[1,2,3],以下这些都可以视作arr的排列:[1,2,3],[1,3,2],[3,1,2],[2,3,1]。整数数组的下一个排列是指整数的下一个字典序更大的排列。更正式地,如果数组的所有排列根据其字典顺序从小到大排列在一个容器中,那么数组的下一个排列就是在这个有序容器中排在它后面的那个排列。如果不存在下一个更大的排列,那么这个数组必须重排为字典最小的排列(即,其元素按升序排列)。
2025-03-26 11:31:17
975
原创 LeetCode 第29题、30题
例如,如果words = ["ab",“cd”,“ef”],那么“abcdef"",“”abefcd“,”cdabef“,”cdefab“,”efabcd“,”efcdab“都是串联子串。例如,8.345将被截断为8,-2.7335将被截断为-2,返回被除数除以除数得到的商。注意:假设环境只能存储32位有符号整数,其数值范围是[-2^31,2^31-1]。如果商小于-2^31,则返回-2^31。s中的串联子串是指一个包含words中所有words中所有字符串以任意顺序排列连接起来的子串。
2025-03-25 14:14:30
905
原创 LeetCode 第25、27、28题
给你两个字符串haystack和needle,请你在haystack字符串中找出needle字符串的第一个匹配项的下标(下标从0开始)。给你一个数组nums和一个值val,你需要原地移除所有数值等于val的元素,并返回移除后数组的新长度。如果节点总数不是k的整数倍,那么请将最后剩余的节点保持原有顺序。使用快慢指针的方法,慢指针指向当前可以放置元素的位置,快指针用于遍历数组。给你链表的头节点head,每k个节点一组进行翻转,请你返回修改后的链表。不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。
2025-03-25 11:44:52
921
原创 LeetCode 第22~24题
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即只能进行节点交换)。给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。数字n代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。使用优先队列(最小堆)来维护k个链表的当前最小节点。
2025-03-19 16:52:31
344
原创 LeetCode 第19~21题
给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。中等解题思路:方法一:双指针(一次扫描)方法二:计算长度(两趟扫描)先遍历一遍计算链表长度,再遍历一遍删除指定节点。
2025-03-19 14:44:13
1250
原创 LeetCode 第17题~18题
给你一个由n个整数组成的数组nums,和一个目标值target。给定一个仅包含数字2~9的字符串,返回所有它能表示的字母组合。答案可以按任意顺序返回。给出数字到字母的映射如下(与电话按键相同)。注意1不对应任何字母。解题思路:固定两个数值,并移动两个指针进行移动。你可以按任意顺序返回答案。
2025-03-19 11:51:24
603
原创 LeetCode 第14~16题
给你一个整数数组nums,判断是否存在三元组[nums[i],nums[j],nums[k]]满足i!=k,同时还满足nums[j]+nums[j]+nums[k]==0。请你返回所有和为0且不重复的三元组。注意:答案中不可以包含重复的三元组。给定一个长度为n的整数数组nums和一个目标值target。请你从nums中选出三个整数,使它们的和与target最接近。返回这三个数的和,假定每组输入只存在恰好一个解。编写一个函数来查找字符数组中的最长公共前缀。如果不存在公共前缀,返回字符串“”。
2025-03-18 15:55:32
878
原创 LeetCode 第11题~第13题
罗马数字和整数的转换如第12题所示,通常情况下,罗马数字中小的数字在大的数字的右边。数字1在数字5的左边,所表示的数等于大数5减小数1得到的数值4。同样地,数字9表示IX。给定一个长度为n的整数数组height。有n条垂线,第i条线的两个端点是(i,0)和(i,height[i])。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳更多的水。返回容器可以储存的最大水量,不可以倾斜容器。使用贪心的思路,每次尽可能使用最大的符号。给定一个整数,将其转换为罗马数字。给定一个罗马数字,将其转换成整数。
2025-03-18 12:09:28
1282
原创 LeetCode 第5题:最长回文子串
回文串是以中心对称的,可以从中心位置开始,向两边拓展,找到以该位置为中心的最长回文串。回文串的中心可以是一个字符(奇数)或者两个字符(偶数),最后记录最长的回文子串。使用动态规划可以避免重复计算,定义dp[i][j]表示s[i....j]是否是回文串。中心拓展法相较于动态规划,其时间复杂度和空间复杂度都较低。给定一个字符串s,找到s中最长的回文子串。双指针法/中心拓展法。
2025-03-17 16:07:25
189
原创 LeetCode 第6题:Z字形变换
然后,你的输出需要从左到右逐行读取,产生出一个新的字符串,比如:”PAHNAPLSIIGYIR“。请你实现这个将字符串进行指定行数变换的函数。将一个给定字符串s,根据给定的行数numrows,从上往下,从左到右进行Z字形排列。
2025-03-17 15:17:04
391
原创 LeetCode 第7题:整数反转
如果反转后整数超过32位的有符号整数的范围[-2^31,2^31-1],就返回0。给你一个32位的有符号整数x,返回将x中的数字部分反转后的结果。假设环境不允许存储64位整数(有符号或无符号)。
2025-03-17 15:16:25
208
原创 LeetCode-490 迷宫问题(DFS)
由空地和墙组成的迷宫中有一个球,球可以向上下左右四个方向滚动,但在遇到墙壁前不会停止滚动。当球停下时,可以选择下一个方向。给定球的起始位置、目的地和迷宫。判断球能否在目的地停下。迷宫由一个0和1的二维数组组成,1表示墙壁,0代表空地。你可以假设迷宫的边缘都是墙壁,防止小球出界,起始位置和目的地的坐标通过行号和列好给出。该题特别注意,小球是向一个方向运动,直到停下为止,并不是一次只运动一格。最短路径-迷宫问题(DFS---
2025-03-17 11:27:53
301
原创 LeetCode 第8题:字符串转换整数 (atoi)
请你来实现一个myAtoi(string s)函数,使其能将字符串转换成一个32位有符号整数。O(n),其中n是字符串长度。
2025-03-13 11:32:25
178
原创 LeetCode 第4题:寻找两个正序数组的中位数
给定两个大小分别为m和n的正序数组(从小到大)数组nums1和nums2。请你找出并返回这两个正序数组的中位数。要求算法的时间复杂度应该为O(log(m+n))。该题最关键的地方在于时间复杂度要达到O(log(m+n)),故必须使用二分查找,将该问题转化为寻找第k小数的问题。将两个正序的数组合并到一个正序数组当中,最后根据整体数组的奇偶性,直接输出中位数。
2025-03-13 10:56:56
321
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人