一.将给定字符串按给定行数 画N ,输出从左往右逐行读取拼成的新字符串
比如输入字符串为 "LEETCODEISHIRING"
行数为 3 时,排列如下:
L C I R E T O E S I I G E D H N
之后输出:"LCIRETOESIIGEDHN"
二.思路
一个数组list n行 一行一个字符串元素
遍历给定的字符串 每次放的地方list[index] index碰到0会 +1+1 碰到n-1 会-1-1 可以取一个方向dir=+-1 index为index加上这个反向
最后再将字符串拼接成新的字符串
注:当字符串还不够拐弯的时候 行数就是1行的时候
/**
* @param {string} s
* @param {number} numRows
* @return {string}
*/
/**
* 一个数组 三个字符元素 遍历 012 往里放 10 12 10这样放
*/
var convert = function (s, numRows) {
if (s == null || s.length < numRows || numRows == 1) { return s; }
let list = new Array(numRows).fill('');
let dir = 1;
let index = 0;
for (let i = 0; i < s.length; i++) {
list[index] += s[i];
index += dir;
if (index == 0 || index == numRows - 1) dir = -dir;
}
return list.join('');
};
三.知识点
按行排序:
初始化几个非空行,
从左到右迭代 s,将每个字符添加到合适的行。可以使用当前行index和当前方向dir这两个变量对合适的行进行跟踪。
只有当我们向上移动到最上面的行或向下移动到最下面的行时,当前方向才会发生改变。