(javaScript)leetcode每日一题 - 54. 螺旋矩阵

155 阅读1分钟

leetcode每日一题 - 54 54. 螺旋矩阵

image.png

题解

1、如果数组为空,返回空数组
2、定义4个边界以及当前方向
3、当左边界小于等于右边界,且上边界小于等于下边界时,执行while循环,按照右、下、左、上的顺序,依次将路劲上的字符添加到结果里
4、while循环结束后,返回结果

image.png

贴出代码

// 12.54 螺旋矩阵
  function spiralOrder(matrix: number[][]): number[] {
    if (matrix.length === 0) {
      return []
    }
    // 定义四个边界以及当前的方向
    let top: number = 0
    let bottom: number = matrix.length - 1
    let left: number = 0
    let right: number = matrix[0].length - 1
    let direction: string = 'right'
    let result: number[] = []
    /**
     * [1,2,3,4],
     * [5,6,7,8],
     * [9,10,11,12]
     */
    while (left <= right && top <= bottom) {
      // 按右下左上的顺序依次将字符加到result中去
      if (direction === 'right') {
        for (let i = left; i <= right; i++) {
          result.push(matrix[top][i])
        }
        top++
        direction = 'down'
      } else if (direction === 'down') {
        for (let i = top; i <= bottom; i++) {
          result.push(matrix[i][right])
        }
        right--
        direction = 'left'
      } else if (direction === 'left') {
        for (let i = right; i >= left; i--) {
          result.push(matrix[bottom][i])
        }
        bottom--
        direction = 'up'
      } else if (direction === 'up') {
        for (let i = bottom; i >= top; i--) {
          result.push(matrix[i][left])
        }
        left++
        direction = 'right'
      }
    }
    console.log(result)

    return result
  }
  let test = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9],
  ]
  spiralOrder(test)