跳到主要内容

54.螺旋矩阵

链接:54.螺旋矩阵
难度:Medium
标签:数组、矩阵、模拟
简介:给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。

题解 1 - typescript

  • 编辑时间:2020-06-05
  • 执行用时:84ms
  • 内存消耗:32.4MB
  • 编程语言:typescript
  • 解法介绍:递归判断每一圈
function spiralOrder(matrix: number[][]): number[] {
const row = matrix.length;
if (row === 0) return [];
else if (row === 1) return matrix[0];
const ans: number[] = [];
const col = matrix[0].length;
spiral(0, row - 1, 0, col - 1);
return ans;
function spiral(startI: number, endI: number, startJ: number, endJ: number): void {
if (endI < startI || endJ < startJ) return;
for (let i = startJ; i <= endJ; i++) ans.push(matrix[startI][i]);
for (let i = startI + 1; i <= endI; i++) ans.push(matrix[i][endJ]);
for (let i = endJ - 1; startI !== endI && i >= startJ; i--) ans.push(matrix[endI][i]);
for (let i = endI - 1; startJ !== endJ && i >= startI + 1; i--) ans.push(matrix[i][startJ]);
if (startI !== endI && startJ !== endJ) spiral(startI + 1, endI - 1, startJ + 1, endJ - 1);
}
}

题解 2 - typescript

  • 编辑时间:2021-03-15
  • 执行用时:92ms
  • 内存消耗:39.1MB
  • 编程语言:typescript
  • 解法介绍:递归循环遍历。
function spiralOrder(matrix: number[][]): number[] {
const ans: number[] = [];
dfs(0, 0, matrix.length - 1, matrix[0].length - 1);
return ans;
function dfs(startRow: number, startCol: number, endRow: number, endCol: number): void {
if (startRow > endRow || startCol > endCol) return;
for (let i = startCol; i <= endCol; i++) ans.push(matrix[startRow][i]);
for (let i = startRow + 1; i <= endRow; i++) ans.push(matrix[i][endCol]);
if (endRow !== startRow)
for (let i = endCol - 1; i >= startCol; i--) ans.push(matrix[endRow][i]);
if (endCol !== startCol)
for (let i = endRow - 1; i >= startRow + 1; i--) ans.push(matrix[i][startCol]);
dfs(startRow + 1, startCol + 1, endRow - 1, endCol - 1);
}
}