leetcode第54题螺旋矩阵

116 阅读1分钟

题目: 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

我的JavaScript 解法

/**
 * @param {number[][]} matrix
 * @return {number[]}
 */
var spiralOrder = function(matrix) {
  const rowLen = matrix.length;
  const colLen = matrix[0].length;
  let upperBound = 0, lowerBound = rowLen -1, leftBound = 0, rightBound = colLen -1;
  let result = [];
  while(result.length < rowLen * colLen) {
    if(upperBound <=lowerBound) {
      for(let i = leftBound; i <= rightBound; i++) {
        result.push(matrix[upperBound][i]);
      }
      upperBound++;
    }
    if(leftBound <=rightBound) {
      for(let i = upperBound; i <= lowerBound; i++) {
        result.push(matrix[i][rightBound]);
      }
      rightBound--;
    }
    if(upperBound <=lowerBound) {
      for(let i = rightBound; i >= leftBound; i--) {
        result.push(matrix[lowerBound][i]);
      }
      lowerBound--;
    }
    if(leftBound <=rightBound) {
      for(let i = lowerBound; i >= upperBound; i--) {
        result.push(matrix[i][leftBound]);
      }
      leftBound++;
    }
  }
  return result;
};

解析: 二维数组的花样遍历,定义四个边界,遍历

  • 时间复杂度: O(n)O(n)
  • 空间复杂度: O(n)O(n)