将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。

比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下:

1
2
3
P   A   H   N
A P L S I I G
Y I R

之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:”PAHNAPLSIIGYIR”。

思路

  1. 维护一个字符串数组 string[],分别表示对应的 numRows 行元素
  2. 输入字符串 s 按照每组 numRows * 2 - 2 个元素分组
  3. 根据分组内部序号确定字符应添加到的字符串中
  4. 最后将字符串数组拼接
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var convert = function (s, numRows) {
if (numRows === 1) {
return s
}
const strItems = new Array(numRows).fill('')
const factor = numRows * 2 - 2
for (let i = 0; i < s.length; ++i) {
const innerIndex = i % factor
if (innerIndex < numRows) {
strItems[innerIndex] += s[i]
} else {
strItems[factor - innerIndex] += s[i]
}
}
return strItems.join('')
}