原题链接:leetcode6
题目描述:给一个字符串,再给一个数值numRows,将字符串以z字形处理,然后再按照行输出
思路:是一道找规律的题,难点就是如何将字符串按照z字形存储到二维数组中,然后遍历。
一、存二维数组:先竖着,再横着到n-1,再竖着……
存第一列的时候 每次存入一个数组,其他列的时候直接存入对应的行中
二、取二维数组:水平一行一行取
注意边界条件,存储的过程中空值可以不用存储。
/**
* @param {string} s
* @param {number} numRows
* @return {string}
*/
var convert = function (s, numRows) {
let res = []
// 边界条件
if (numRows == 1 || s.length < numRows || s.length == 1) {
return s
}
// 列数
let k = 0
let temps = s.split('')
while (temps.length) {
for (let i = 0; i < numRows; i++) {
// 存数组的时候,所在的位置满足这两个条件才进行存储
if (k % (numRows - 1) == 0 || i + (k % (numRows - 1)) === numRows - 1) {
// 对第一列进行特殊处理,存入数组
if (k == 0) {
res.push([temps.shift()])
} else {
// i是对应的行
res[i].push(temps.shift())
}
}
}
// 执行完一列,k就增加一列
k++
}
return res.flat().join('')
};
let s = 'PAYPALISH,IRING'
let numRows = 2
console.log(convert(s, numRows))