将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下:
1 2 3
| P A H N A P L S I I G Y I R
|
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:”PAHNAPLSIIGYIR”。
思路
- 维护一个字符串数组 string[],分别表示对应的 numRows 行元素
- 输入字符串 s 按照每组 numRows * 2 - 2 个元素分组
- 根据分组内部序号确定字符应添加到的字符串中
- 最后将字符串数组拼接
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('') }
|