知其然,知其所以然
算法与数据结构 2026-09-24

LeetCode 5. 最长回文子串

给定字符串 `s`,找出其中最长的回文子串。本文用"中心扩展":把每个位置当作回文的中心,向两边同时扩展,直到两端字符不等。时间 O(n²),空间 O(1),写法简单,不容易出错。真正容易漏掉的是回文中心有两种:奇数长度的中心是一个字符,偶数长度的中心是两个相邻字符之间。本文实测

LeetCode 算法 动画演示
算法与数据结构 2026-09-24

LeetCode 4. 寻找两个正序数组的中位数

给定两个已经排好序的数组 `nums1` 和 `nums2`,求它们合并后的中位数,要求时间复杂度是对数级。把两个数组合并再取中间当然可以(线性时间),对数级的做法是二分:不合并,只找一个"切点",把两个数组各自切成左右两半,使得两个左半合起来正好是全部元素的前一半,并且左半的最

LeetCode 算法 动画演示
算法与数据结构 2026-09-24

LeetCode 6. Z 字形变换

把字符串 `s` 按 Z 字形排列在 `numRows` 行上:从上到下依次填,到底之后斜着向右上走回第一行,如此往复;然后按行从上到下逐行读出所有字符,拼成新字符串。例如 `"PAYPALISHIRING"` 排成 3 行后逐行读出是 `"PAHNAPLSIIGYIR"`。这道

LeetCode 算法 动画演示
算法与数据结构 2026-09-24

LeetCode 8. 字符串转换整数 (atoi)

实现一个 `atoi`:跳过前导空格,读一个可选的正负号,再读连续的数字,遇到第一个非数字字符就停;结果超出 32 位有符号整数范围时,截断到边界值;没有读到任何数字时返回 0。规则很简单,坑全在细节里:哪些字符算"空格"、数字是哪几个字符、溢出怎么在不使用 64 位整数的前提下

LeetCode 算法 动画演示
算法与数据结构 2026-09-24

LeetCode 9. 回文数

判断一个整数是不是回文数:正着读和倒着读一样。最直接的做法是转成字符串再比较,题目的进阶要求是不转字符串。不转字符串的常见思路是把整数整体翻转再比较,但翻转过程可能溢出;更巧的做法是只翻转后一半:每次把 `x` 的最后一位移到 `rev` 上,直到 `rev` 不再小于剩下的 `

LeetCode 算法 动画演示
算法与数据结构 2026-09-24

LeetCode 10. 正则表达式匹配

给定字符串 `s` 和模式 `p`,判断 `p` 能否完整匹配整个 `s`。模式里 `.` 匹配任意单个字符,`*` 表示它前面那个字符出现零次或多次(`.*` 就能匹配任意长度的任意字符串)。这道题的难点在 `*`:它可以让前面的字符"吃掉"任意多个字符,每一处 `*` 都是一

LeetCode 算法 动画演示
算法与数据结构 2026-09-24

LeetCode 11. 盛最多水的容器

给定一个数组 `height`,第 `i` 个元素表示第 `i` 根竖线的高度。选两根竖线和 x 轴围成一个容器,容量是 `min(两根线的高度) × 两根线的下标之差`,求最大容量。暴力做法是枚举所有线对,时间 O(n²)。双指针做法从最宽的一对(两端)开始,每一步只移动较矮的

LeetCode 算法 动画演示
算法与数据结构 2026-09-24

LeetCode 12. 整数转罗马数字

把 1 到 3999 的整数转换成罗马数字。罗马数字用 `I V X L C D M` 七个符号表示 1、5、10、50、100、500、1000,通常大的符号写在左边、做加法;但有六种"减法组合"——`IV`(4)、`IX`(9)、`XL`(40)、`XC`(90)、`CD`(

LeetCode 算法 动画演示
算法与数据结构 2026-09-24

LeetCode 13. 罗马数字转整数

上一题是整数转罗马数字,这一题反过来:给定一个合法的罗马数字,转换成整数。罗马数字里大多数符号是相加的,但当一个小的符号出现在比它大的符号左边时,表示减法(`IV` 是 4,`XC` 是 90)。所以只要从左到右扫描,看当前符号是否小于它右边的符号:小于就减去它,否则加上它。本文

LeetCode 算法 动画演示
算法与数据结构 2026-09-24

LeetCode 14. 最长公共前缀

给定一个字符串数组,找出所有字符串共有的最长前缀,没有公共前缀就返回空字符串。直接的做法是"竖着扫":以第一个字符串为基准,逐列比较所有字符串的同一个位置,一旦某个字符串已经到头,或者这一列有不同的字符,前缀就到此为止。这道题的实现很短,但有一个边界很容易漏:其他字符串比第一个字

LeetCode 算法 动画演示
算法与数据结构 2026-09-24

LeetCode 15. 三数之和

给定一个整数数组,找出所有和为 0 的三元组,结果里不能有重复的三元组(顺序无所谓)。暴力做法是三层循环加去重,时间 O(n³)。标准做法是先排序,然后固定第一个数,在它右边用双指针找另外两个数,时间降到 O(n²)。这道题真正的难点在于去重:数组里有很多重复值时,同一个三元组会

LeetCode 算法 动画演示
算法与数据结构 2026-09-24

LeetCode 16. 最接近的三数之和

给定一个整数数组和一个目标值 target,从数组里选三个不同位置的数,使它们的和最接近 target,返回这个和。题目保证答案唯一。暴力做法是三层循环,时间 O(n³)。标准做法与三数之和一样:先排序,固定第一个数,在右侧用双指针夹逼,时间 O(n²)。这道题有两个容易写错的地

LeetCode 算法 动画演示
京ICP备2026067502号-1京公网安备11010502063487号