题目描述
思路解析动画文字版
关键就两个状态:当前行 cur 和 方向 step(+1 往下 / −1 往上)。碰到顶行或底行就掉头。盯住下面格子里字母怎么走位。
空格子 · 3 行 × 7 列:先摆好 3 行的空格子(列数够用就行)。指针停在 第 0 行,方向往下,准备填第一个字母 P。
填 P · 第 0 行:把 P 放进 (行0, 列0)。现在在顶行,方向是往下 +1,下一格去第 1 行。
填 A · 第 1 行:竖着往下,A 放进 (行1, 列0)。还没到底,继续往下。
填 Y · 第 2 行(到底!):Y 放进 (行2, 列0)——到最后一行了!方向要掉头变成往上 −1,而且斜着走时列要 +1。
填 P · 斜着往上:掉头往上!P 走到 (行1, 列1)——行号减 1、列号加 1,这就是 Z 字的斜笔。
填 A · 回到顶行:A 走到 (行0, 列2)——又撞到顶行了!方向再掉头变回往下 +1,接下来又是竖着走。
填 L · 往下:竖着往下,L 放进 (行1, 列2)。注意列号不变——竖着走时同一列往下叠。
填 I · 第 2 行(到底):I 放进 (行2, 列2),又到底了。掉头往上,下一步斜着走、列再 +1。
填 S · 斜着往上:斜笔!S 走到 (行1, 列3)。行减 1、列加 1。
填 H · 回到顶行:H 走到 (行0, 列4),撞顶,再次掉头往下。Z 字就是这样一上一下来回织。
填 I · 往下:竖着往下,I 放进 (行1, 列4)。
填 R · 第 2 行(到底):R 放进 (行2, 列4),到底,掉头往上。
填 I · 斜着往上:斜笔,I 走到 (行1, 列5)。还剩两个字母 N、G。
填 N · 回到顶行:N 走到 (行0, 列6),撞顶,掉头往下。
填 G · 最后一个:最后一个 G 往下放进 (行1, 列6)。14 个字母全部按 Z 字填完了!下面开始一行一行读出来。
Z 字织好 · 准备逐行读:退一步看整张图:字母的轨迹正是一笔一笔的 Z 字(竖下→斜上→竖下…)。原串顺序已经被打散到各行,接下来从上到下逐行读出来就是答案。
读第 0 行:从第 0 行从左到右收字母:P、A、H、N → 拿到 "PAHN"。空格子直接跳过。
读第 1 行:再读第 1 行:A、P、L、S、I、I、G → 接上变成 "PAHN" + "APLSIIG"。中间行字母最多,因为斜笔都落在这。
读第 2 行 · 拼完:最后读第 2 行:Y、I、R → 全拼起来 PAHN + APLSIIG + YIR = PAHNAPLSIIGYIR,正是答案!
省内存的写法:不存格子,只存 numRows 个行串。指针在行间来回走,字母追加到对应行串,走到顶/底就翻转方向。
雷区实演 · numRows = 1:若 numRows=1,所有字母都挤在同一行,顶行就是底行、方向永远翻不过来。所以必须开头特判,直接原样返回 s(ABCDEF→ABCDEF)。
边界三连:先想一行(特判)、行数比字符还多(排成一竖列)、最小串三种,代码就稳了。
面试追问:把「按行追加省空间」「O(n)」「方向翻转怎么定行号」讲清楚,是这题面试的得分点。
参考代码
class Solution: def convert(self, s, numRows): if numRows == 1: return s # 一行不用变换 rows = [''] * numRows # numRows 个行串 cur, step = 0, 1 # 当前行 / 方向 for ch in s: rows[cur] += ch # 追加到当前行 if cur == 0: step = 1 # 顶行 → 往下 elif cur == numRows - 1: step = -1 # 底行 → 往上 cur += step return ''.join(rows) # 逐行拼接复杂度
- 时间复杂度:O(n),n 为字符串长度;每个字符只被放入一次、读出一次,与 numRows 无关 → O(n)
- 空间复杂度:O(n),numRows 个行串加起来恰好存下全部 n 个字符(不含返回值则 O(numRows))
易错点
面试追问把动画讲成自己的话
追问为什么不用真建二维数组?
追问时间复杂度是多少?
追问怎么确定一个字符落在第几行?
这道题到这就讲完了。动画和文字是同一套思路——别光看,关掉页面自己默写一遍。然后顺着主线继续:
字符串转换整数 (atoi)
LeetCode 8 · 中等 · 沿着 字符串套路 继续往下推进
把这道题真正学会,再走
图解算法年卡 ¥99 /年
- ✓本题每步动画的吴师兄语音讲解(全站陆续覆盖)
- ✓小欧带 8 步通关训练——追问到不看答案也能写对、能 30 秒讲给面试官听
- ✓学习报告,记录每道题的掌握程度
76k+ GitHub Star · 吴师兄开源图解算法,几十万开发者在看的算法讲解
想成体系刷透这类套路?去图解算法专题