09月
9 篇- LeetCode_9: Palindrome NumberLeetCode_9: Palindrome NumberAI 摘要
文章介绍不转为字符串的回文数判断方法:先排除负数与末尾为零的非零整数,再逐位翻转数字的后半部分,直到与剩余前半部分相遇。偶数位比较两部分是否相等,奇数位则忽略中间一位。文中通过示例说明判定规则,并给出 C++ 和 Go 的常数额外空间实现。
本文讨论 LeetCode 回文数问题,要求判断整数正反读是否相同。题解指出:0 返回 true;负数或末位为 0 的非零数直接返回 false。随后只需反转数字后半部分,直到反转值不小于剩余前半部分,最后比较反转值是否等于前半部分,或反转值除以 10 是否等于前半部分,以处理奇数位数。时间复杂度 O(n),并给出 C++ 和 Go 实现代码。
文章讲解了 LeetCode 回文数字题的解法:判断一个整数是否为回文数。核心思路是利用回文数的对称性,将数字后半部分翻转,与前半部分比较是否相等,无需将整个数字翻转,避免溢出。需特判负数和末尾为零的非零数字,直接返回 false;零视为回文。循环中不断取出末位拼接到翻转数,直到翻转数不小于剩余数字,最后判断两者相等或翻转数去掉末位后相等(处理奇数位情况)。时间复杂度为 O(n),文中附有 C++ 和 Go 两种语言的 AC 代码实现。
题目链接:https://leetcode.com/problems/palindrome-number/description/ 判断一个数字是不是回文数字。 Example 一个数字为回文数字, 则对称点后半部分的翻转数字和前半部分的数值相等, 模拟判断即可(特判:负数和末尾为零的非零数字直接返回) 复杂度 版本 版本
- LeetCode_8: String to Integer (atoi)LeetCode_8: String to Integer (atoi)AI 摘要
文章按题目规则实现字符串转整数:跳过开头空格,读取可选的正负号,再连续累积数字,遇到非数字字符时停止。重点讨论无有效数字时返回零,以及结果超出 32 位整数范围时返回对应边界值。文中通过示例梳理流程,并给出在累积前检查溢出的 C++ 与 Go 代码。
文章讲解 LeetCode 的 atoi 题:把字符串转换为 32 位整数。需跳过前导空格,识别可选正负号,连续读取数字直到非数字或结束;若首个非空字符非法则返回 0;结果溢出时按符号返回 INT_MAX 或 INT_MIN。题解按题意模拟,逐位累加并提前判断溢出,时间复杂度 O(n),并给出 C++ 和 Go 实现。
文章讲解了 LeetCode 上“字符串转整数(atoi)”一题的解法。题目要求实现 atoi 函数:跳过字符串前导空格,读取可选的正负号及后续数字,遇到非数字字符即停止转换;若首个非空字符不是数字或符号则返回 0,结果超出 32 位整数范围时返回 INT_MAX 或 INT_MIN。题解思路是按题意模拟:先跳过空格并判断符号,再逐位累加计算,转换前先判断是否溢出。文中给出了 C++ 和 Go 两种实现,时间复杂度为 O(n)。
题目链接:https://leetcode.com/problems/string-to-integer-atoi/description/ 实现一个函数。输入一串字符串, 扫描字符串, 跳过前面的空格, 直到遇上数字或正负符号才开始做转换, 而再遇到非数字或字符串结束时('\0')才结束转换, 并将结果返回。 Example **Hint** - 扫描字符串遇到的第一个非空字符不是数字或者`+`,`-`(用于表示符号), 返回数字0 - 转换后得到的数字为32位整型数据(`int32`), 当转换的数字溢出时, 返回`INT_MAX(2^31−1)` or `INT_MIN(−2^31)` 按照题意模拟流程。遇上第一个非空字符判断…
- LeetCode_7: Reverse IntegerLeetCode_7: Reverse IntegerAI 摘要
文章讨论如何翻转一个 32 位有符号整数,通过反复取出末位、累积到结果中,实现十进制数字的逆序。解题重点是负数符号、末尾零以及翻转后超出整数范围的处理,溢出时按题意返回零。文中列举正数、负数和带末尾零的示例,并提供 C++ 与 Go 两种实现。
本文介绍LeetCode整数反转题:给定32位整数,输出其翻转后的数字,例如123变321、-123变-321、120变21;若翻转结果超出32位整型范围则返回0。题解提出按位取余并逐次乘10累加的方法,同时处理正负号,复杂度与数字位数相关。文中给出C++和Go实现,C++用long long暂存并判断溢出,Go在循环中预判溢出。
文章讲解 LeetCode “整数反转”题:将32位整数翻转,如123变321、-123变-321、120变21,若翻转后溢出int范围则返回0。解法是逐位取余取出数字并累乘到结果,需注意正负号处理与溢出判断。文中给出C++和Go两种实现:C++用long long暂存结果再检查是否越界,Go则在每步乘10前预判溢出提前返回0,时间复杂度为与位数相关的常数级。
题目链接:https://leetcode.com/problems/reverse-integer/description/ 给出一个32位整型数字(), 输出这个数字翻转后的数字。 Example1 Example2 Example3 **Hint** `For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.` 即考虑数字翻转后溢出的问题 水题, 考虑正负, 按照转换二进制的套路走一波就行 复杂度,其实和数字的位数有关一个常数级别复杂度 版本 版本
- LeetCode_6: ZigZag ConversionLeetCode_6: ZigZag ConversionAI 摘要
文章分析字符串按指定行数进行 Z 字形排列后的读取规律,以逐行计算字符下标代替实际构造二维图形。首尾两行按固定周期取字符,中间行补取同周期内的斜线位置,同时处理单行及短字符串等情况。文中配合排列示例,提供 C++ 和 Go 代码,按线性扫描生成结果。
文章讲解 LeetCode 的 Z 字形变换题:给定字符串和行数,将字符按 Z 字形纵向排列后逐行读取。题解指出这是规律题,逐行扫描并推算每行字符索引。首行和末行每个周期只取一个字符,中间行每周期取两个;周期长度为 2*(numRows-1)。按此规律依次拼接即可,时间复杂度 O(n),并附有 C++ 与 Go 的 AC 代码实现。
文章讲解LeetCode的Z字形变换题:给定字符串和行数,将字符按Z字形排列后逐行输出。解法为找规律:逐行扫描,首行和末行字符索引每次增加2(numRows-1),中间行则在同一周期内额外插入一个中间位置字符,按此规律依次取出字符拼接结果。特殊情况下(字符串长度不大于1、不大于行数或行数为1)直接返回原串。算法时间复杂度为O(n),文中给出了C++和Go两种实现代码。
题目链接:https://leetcode.com/problems/zigzag-conversion/description/ 给出一个字符串, 和一个指定行数, 将字符串纵向按照z字形排列(指定行数为z字形大小) Example Z字形排列图 一个规律题, 按照字形排列图, 逐行扫描, 推断每一行下一个出现字母的索引的位置即可。 具体规律见图 复杂度 版本 版本
- LeetCode_5: Longest Palindromic SubstringLeetCode_5: Longest Palindromic SubstringAI 摘要
文章介绍 LeetCode 最长回文子串问题,采用 Manacher 算法,通过统一奇偶回文的索引表示和回文半径数组减少重复比较。扫描时利用已有中心与右边界估算初始半径,再向两侧扩展并维护最长结果,最终映射回原字符串。文中提供 C++ 与 Go 实现,并给出算法详解的参考入口。
本文是LeetCode“最长回文子串”题解。题目要求从给定字符串中找出最长回文子串,字符串长度不超过1000。作者采用Manacher(马拉车)算法,将时间复杂度降至O(n),通过维护当前回文中心、边界及半径,利用回文对称性减少重复扩展,并给出C++和Go两种实现代码,最终返回最长回文子串。
文章讲解 LeetCode 第 5 题“最长回文子串”:给定字符串,求其中最长的回文子串。作者采用马拉车(Manacher)算法求解,通过在字符间插入分隔符统一奇偶回文,利用已计算的回文半径和对称性减少重复比较,维护当前回文中心和边界,最终记录最大半径及中心位置并截取答案,时间复杂度为 O(n)。文中给出了 C++ 和 Go 两种语言的 AC 实现代码。
题目链接:https://leetcode.com/problems/longest-palindromic-substring/description/ 给出一个字符串, 找出其中最长的回文字符串(字符串最大长度为1000) Example Manache Algorithm(马拉车算法), 关于算法详情 Click Here! 复杂度 版本 版本
- LeetCode_4: Median of Two Sorted ArraysLeetCode_4: Median of Two Sorted ArraysAI 摘要
文章讨论两个有序数组的中位数问题,先给出按归并过程定位中间元素的线性解法,再将问题转化为查找合并序列中的第 k 小元素。通过比较两数组的分割位置并排除一批候选,逐步缩小问题规模。文中解释奇偶长度的处理,分析复杂度,并提供 C++ 与 Go 代码。
本文讲解 LeetCode“两个有序数组的中位数”解法。题目要求合并两个升序数组并求中位数,官方期望复杂度为 O(log(m+n))。文章先说明中位数取值规则,再给出两种方法:归并扫描法,复杂度 O(m+n);以及转化为寻找第 k 小数,通过比较两数组第 k/2 个元素并每次剔除一半,递归求得第 k 小,复杂度 O(log(m+n)),并附 C++ 与 Go 实现。
文章讲解LeetCode第4题“寻找两个有序数组的中位数”。题目要求对两个升序数组合并后求中位数,期望复杂度为O(log(m+n))。作者给出两种解法:方法一按归并排序思路遍历两数组,定位中位数下标并累加求值,复杂度O(m+n),虽不达标但能通过;方法二将问题转化为求第k小的数,通过比较两数组各自第k/2个元素,每次可安全剔除较小一方的前k/2个元素,递归求解,复杂度为O(log(m+n))。最后附上C++(两种方法)和Go语言的AC代码实现。
题目链接:https://leetcode.com/problems/median-of-two-sorted-arrays/description/ 给出两个升序的有序序列, 找到两个序列合并后序列的中位数 Hint: 官方希望复杂度为 对于一个长度为n的已排序数列, 若n为奇数, 中位数为 若n为偶数, 则中位数 走一次归并排序逻辑(先确定中位数下标过程中注意计算即可) 复杂度, (明显和官方要求复杂度不是一个级别, 目测后台数据比较水所以过了) 转换为寻找第k大的数据, 类似于快排递归调整数据使得左边所有数据小于当前数据, 右边大于等于当前数据这一步骤 详解 假设和数组中元素个数都是大于 的, 且从 0 开始编号, 比较 和 …
- LeetCode_2: Add Two NumbersLeetCode_2: Add Two NumbersAI 摘要
文章讲解两个逆序链表表示的整数相加。由于节点从低位到高位排列,可同步遍历两条链表,将当前位与进位相加,取个位建立结果节点,并把进位带入下一轮。较短链表耗尽后按零处理,末尾仍有进位则补充节点。文中用示例说明流程,并提供 C++ 与 Go 实现。
文章是 LeetCode“两数相加”的题解。题目用两个倒序链表表示非负整数,每位为一个节点,要求相加后返回倒序链表。题解指出倒序链表正好从低位到高位存储,因此可同时遍历两链表,逐位相加并维护进位。空节点值按 0 处理,新节点存当前和的个位,进位为和除以 10;遍历结束后若仍有进位则追加节点。时间复杂度 O(n)。代码给出 C++ 和 Go 两种实现。
文章讲解了 LeetCode 第 2 题“两数相加”:给定两个倒序存储非负整数的链表,逐位相加并返回表示和的倒序链表。由于倒序链表恰好从低位到高位排列,可直接同步遍历两链表,将对应节点值与进位相加,取模 10 作为新节点值,商作为新进位;某链表遍历完后该位补 0,最后若仍有进位则追加节点。时间复杂度 O(n)。文中给出 C++ 和 Go 两种实现代码。
题目链接:https://leetcode.com/problems/add-two-numbers/description/ 给出两个的倒序的链表, 链表每个节点的值为非负个位数, 链表反续串起来是一个数字, 按照加法规则将两个链表相加并返回一个倒序链表, 链表每个节点的数字对应计算结果的每一位。 例: Hint: (不含前导零, 数字本身可以为零) 倒序链接正好由低位到高位表示了数字的每一位, 直接取节点数据相加插入新链表节点即可(注意进位问题) 复杂度 版本 版本(感觉写的好挫, 一点都不优雅 :[笑哭]:)
- LeetCode_3: Longest Substring Without Repeating CharactersLeetCode_3: Longest Substring Without Repeating CharactersAI 摘要
文章使用滑动窗口解决最长无重复字符子串问题,通过哈希表记录每个字符最近一次出现的位置。遇到重复字符时,窗口起点只向右移动到合适位置,避免被窗口外的旧记录拉回;每一步同步更新最大长度。文中结合示例解释边界判断,并给出 C++ 和 Go 的一次遍历实现。
文章介绍 LeetCode 无重复字符最长子串问题:给定字符串,求不含重复字符的最长子串长度。题解采用哈希表记录每个字符上次出现的下标,并用滑动窗口维护当前无重复子串起点。遍历字符串时,若字符已出现且其上次位置加一大于当前起点,则更新起点;随后更新字符位置,计算当前子串长度并维护最大值。时间复杂度为 O(n),文末给出 C++ 与 Go 实现。
文章讲解LeetCode第3题“无重复字符的最长子串”的解法。题目要求输入一个字符串,输出其中不含重复字符的最长子串的长度。题解思路是利用map或哈希表记录每个字符最后一次出现的下标(默认-1),并用变量维护当前无重复子串的起点。遍历字符串时,若当前字符已出现且其上次出现位置在当前子串起点之后,说明子串内出现重复,则将起点更新为该字符上次出现位置的下一位;否则起点不变。每次遍历用当前下标与起点之差更新最大长度。该算法只需一次遍历,时间复杂度为O(n),文章最后给出了C++和Go两种语言的AC实现代码。
题目链接:https://leetcode.com/problems/longest-substring-without-repeating-characters/description/ 输入一个字符串, 输出没有重复字符的最长子串的长度。 例: Example1 Example2 利用map或者hash表映射字符和字符上一次出现的位置, 当遇到重复字符时(当前符合条件子串结束), 查找下一个不包含重复字符的子串起点, 同时把当前子串的长度和已有最大值比对记录 详解 映射关系中, 保存当前字符在字符串已查询部分中最后出现的下标位置(默认,没有出现过) 默认第一个子串起点下标为0 最大值为当前下标和起点下标的差值与存储的最大值的较大…
- LeetCode_1: Two SumLeetCode_1: Two SumAI 摘要
文章给出 LeetCode 两数之和的题意和哈希表解法:遍历数组时,先查询目标值与当前元素之差是否已出现,命中后返回两个下标,再记录当前值的位置。这样无需枚举所有数对,也避免重复使用当前元素。文中提供 C++ 与 Go 实现,整体采用一次遍历完成查找。
本文介绍 LeetCode 两数之和题解。题目要求给定整数序列和目标值,找出两个不同元素使它们之和等于目标值,并假设仅有唯一解。核心思路是遍历数组,用哈希表记录已访问数值及其下标;每遇到当前值,先查询目标值与当前值之差是否已在表中,若存在则返回两下标,否则把当前值存入表中。该方法时间复杂度为 O(n),文中给出 C++ 和 Go 实现代码。
文章总结了 LeetCode 两数之和题目的解法:给定序列和目标值,找出序列中相加等于目标值的两个数,题目保证有唯一解且元素不可重复使用。核心思路是利用 unordered_map 建立数值与下标的映射,遍历序列时用 target 减去当前值,检查差值是否已在 map 中,若存在即找到答案。该算法时间复杂度为 O(n),文章附有 C++ 和 Go 两种语言的 AC 代码实现。
题目链接:https://leetcode.com/problems/two-sum/description/ 给出一个序列和一个目标值, 判断序列中是否有两个数相加等于序列值 因此认为给出序列必有解, 并且不存在两个相同的元素 利用做好值和序号映射, 在初始化map的时候用当前值和和当前值的差在map中做校验即可 复杂度 版本 版本
