从该题目得知, 依然是遍历循环, 只需设置一个二维数组, 指针会有两个方向, 一个是垂直向下, 一个是斜向右上方.
假设二维数组为 ARR
, 则表示一个单元格为ARR[X][Y]
, 方向垂直向下时, 指针X+1, 到numRows
行时, 则斜向上右方, 指针开始X-1, Y+1, 到0行时, 则继续垂直向下, 直到字符全部填充完成, 通过数值join('')
得到最终的字符串
/**
* @param {string} s
* @param {number} numRows
* @return {string}
*/
var convert = function(s, numRows) {
if (numRows < 2) return s
const arr = []
for (let i = 0; i < numRows; i++) {
arr.push([])
}
const LENGTH = s.length
let i = 0
let x = 0
let y = 0
/** 垂直向下 */
let isDown = true
while (i < LENGTH) {
/** 到第一行时, 方向切换为垂直向下 */
if (x === 0) {
isDown = true
}
/** 到最底下一行时, 方向切换为斜向右上 */
if (x === numRows - 1) {
isDown = false
}
/** 赋值 */
arr[x][y] = s[i];
/** 移动指针 */
if (isDown) {
/** 垂直向下 */
x = x + 1
} else {
/** 斜向右上 */
x = x - 1
y = y + 1
}
i++
}
return arr.map(i => i.join('')).join('')
};