LeetCode热题(JS版) - 48. 旋转图像

73 阅读1分钟

题目

给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。

你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。

示例 1:

image.png

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[[7,4,1],[8,5,2],[9,6,3]]

示例 2:

image.png

输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]
输出:[[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]

思路

好的,以下是关于 LeetCode 第 48 题的 Typescript 解法。

题目描述

给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。

示例:

输入:

csharpCopy code
[  [1,2,3],
  [4,5,6],
  [7,8,9]
]

输出:

csharpCopy code
[  [7,4,1],
  [8,5,2],
  [9,6,3]
]

思路

此题可以先将矩阵先进行上下翻转,然后再沿着左上到右下的对角线翻转即可得到结果。

function rotate(matrix: number[][]): void {
  let row = matrix.length;
  let col = matrix[0].length;

  // 上下翻转
  for (let i = 0; i < row / 2; i++) {
    for (let j = 0; j < col; j++) {
      let temp = matrix[i][j];
      matrix[i][j] = matrix[row - i - 1][j];// row - i - 1 和 i翻转
      matrix[row - i - 1][j] = temp;
    }
  }

  // 对角线翻转
  for (let i = 0; i < row; i++) {
    for (let j = i + 1; j < col; j++) {
      let temp = matrix[i][j];
      matrix[i][j] = matrix[j][i];// i 和 j换
      matrix[j][i] = temp;
    }
  }
}

复杂度分析

  • 时间复杂度为 O(n2)O(n^2),因为需要遍历整个矩阵。
  • 空间复杂度为 O(1)O(1),没有使用额外的空间,只是对原数组进行了修改。