Skip to content

Latest commit

 

History

History
56 lines (49 loc) · 1.4 KB

6.zigzag-conversion.md

File metadata and controls

56 lines (49 loc) · 1.4 KB

Z 字形变换

题目

思路

从该题目得知, 依然是遍历循环, 只需设置一个二维数组, 指针会有两个方向, 一个是垂直向下, 一个是斜向右上方.

假设二维数组为 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('')
};