6. N 字形变换

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

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

P A H N
A P L S I I G
Y I R
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:”PAHNAPLSIIGYIR”。

请你实现这个将字符串进行指定行数变换的函数:

string convert(string s, int numRows);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function convert(s: string, numRows: number): string {
if (numRows < 2) return s;
const rows: string[] = Array(numRows).fill('');
let flag = -1;

let j = 0;
for(let i = 0; i < s.length; i++) {
rows[j] += s[i];
if (j === 0 || j === numRows - 1) {
flag = -flag;
}

j += flag;
}

return rows.join('');
};