题目
这是 leetcode 上一道难度为中等的算法题:
将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 “ABCDEFGHIJKLMN” 行数为 3 时,排列如下:
1 | A E I M |
而输出需要从左往右逐行读取,产生出一个新的字符串:”AEIMBDFHJINCGK”。
思路
有很大一部分算法题的思路都源于找到其中的规律。
输入字符串 s 经过转换后有 numRows 行,如果我们遍历 s 的每个字符 c 会发现,c 的行序列总是从 0 开始增长到 numRows - 1, 然后又从 numRows - 1 回到 0,比如上面的例子:
1 | 字符 index |
所以我的思路就是通过遍历 S, 然后按字符 C 的 index 序列,分别添加到 row[i]
中,然后把 row 的每个元素都 join 起来得到输出。
具体代码如下:
1 | class Solution: |