2026/6/19 5:38:11
网站建设
项目流程
网站做全景图,推广平台大全,厦门网络推广哪家强,苏州互联网公司排名榜一、题目描述
题目链接#xff1a;LeetCode 6. Z 字形变换
题目要求
将字符串 s 按指定行数 numRows 排成Z 字形#xff08;先从上到下#xff0c;再从右到左斜向上#xff09;#xff0c;然后从左到右逐行读取#xff0c;输出新字符串。
示例演示
输入#xff1a;…一、题目描述题目链接LeetCode 6. Z 字形变换题目要求将字符串s按指定行数numRows排成Z 字形先从上到下再从右到左斜向上然后从左到右逐行读取输出新字符串。示例演示输入s PAYPALISHIRING, numRows 3Z 字形排列plaintextP A H N A P L S I I G Y I R输出PAHNAPLSIIGYIR二、解题思路Z 字的 “周期” 与 “方向”要解决这道题首先得搞懂 Z 字形的排列规律1. 周期规律Z 字形的每一个 “完整折回” 是一个周期周期长度为t2×numRows−2比如numRows3时周期t4向下 3 个字符 斜向上 2 个字符2. 方向切换在一个周期内字符的移动方向分两种前numRows-1个字符垂直向下行 1后numRows-2个字符斜向上行 - 1列 1。3. 核心解题步骤我们用模拟矩阵法实现直观易懂处理特殊情况行数为 1 / 行数≥字符串长度计算周期和矩阵的行列数模拟 Z 字路径将字符填充到矩阵中逐行读取矩阵拼接成结果字符串。三、图解过程以示例 1 为例以sPAYPALISHIRING, numRows3为例步骤 1计算周期和矩阵大小周期t2×3-24字符串长度n14总周期数为(144-1)/44向上取整矩阵列数c4×(3-1)8每个周期占 2 列。步骤 2填充矩阵遍历字符串按方向填充字符第 1 个字符P坐标 (0,0)向下移动→行 1第 2 个字符A坐标 (1,0)向下移动→行 1第 3 个字符Y坐标 (2,0)进入周期后半段→斜向上行 - 1列 1第 4 个字符P坐标 (1,1)斜向上→行 - 1列 1以此类推直到填充完所有字符。步骤 3逐行读取矩阵填充完成后逐行拼接非空字符第 0 行P A H N→ 拼接为PAHN第 1 行A P L S I I G→ 拼接为APLSIIG第 2 行Y I R→ 拼接为YIR最终结果PAHNAPLSIIGYIR。四、代码细节说明特殊情况处理当行数为 1 时Z 字就是原字符串当行数≥字符串长度时无法形成 Z 字直接返回原串。矩阵大小计算周期tZ 字每 “一折” 的字符数列数c通过 “向上取整” 计算总周期数再乘以每个周期的列数r-1。方向控制用i % t判断当前字符在周期中的位置i%t r-1周期前半段向下移动行 1否则周期后半段斜向上移动行 - 1列 1。五、复杂度分析时间复杂度O(r×c)填充矩阵和拼接结果的时间r是行数c是列数均与字符串长度呈线性关系。空间复杂度O(r×c)存储矩阵的空间可优化为O(n)直接按行存储字符无需完整矩阵。六、优化思路空间 O (n)如果想优化空间可放弃完整矩阵构建直接按行存储字符定义行数对应的字符串数组遍历原字符串时直接将字符追加到对应行到达行首 / 行尾时切换移动方向避免矩阵的空间浪费最终将各行字符串拼接即可得到结果空间复杂度可降至O(n)。