维护一个长度为numRows的数组
/**
* @param {string} s
* @param {number} numRows
* @return {string}
*/
var convert = function(s, numRows) {
if(numRows == 1)
return s;
const len = Math.min(s.length, numRows);
const rows = [];
for(let i = 0; i< len; i++) rows[i] = "";
let loc = 0;
let down = false;
for(const c of s) {
rows[loc] += c;
if(loc == 0 || loc == numRows - 1)
down = !down;
loc += down ? 1 : -1;
}
let ans = "";
for(const row of rows) {
ans += row;
}
return ans;
};
输入:
LEETCODEISHIRING
规则:
L C I R
E T O E S I I G
E D H N
输出:
LCIRETOESIIGEDHN
结果得到的是
[‘LCIR’,‘ETOESIIG’,‘EDHN’]
也就是,向下的话就按次序把当前的字符加在第i个字符串后面
向右就倒着加
执行过程-LEETCODEISHIRING
L L
L,E E
L,E,E E
L,ET,E T
LC,ET,E C
LC,ETO,E O
LC,ETO,ED D
LC,ETOE,ED E
LCI,ETOE,ED I
........