Skip to main content

旋转图像

题目

给定一个 n * n 的二维矩阵 matrix 表示一个图像. 请你将图像顺时针旋转 90 度. 你必须在原地旋转图像, 这意味着你需要直接修改输入的二维矩阵. 请不要使用另一个矩阵来旋转图像.

提示:
  • n == matrix.length == matrix[i].length
  • 1 <= n <= 20
  • -1000 <= matrix[i][j] <= 1000
示例

48-rotate

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

48-rotate

输入: 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]]

题解

题目给了 n * n, 说明这是一个方形矩阵. 具体的思路是先沿对角线替换, 以示例一为例, 让 24 交换, 37 交换, 68 交换, 得到如下新矩阵(中间). 然后对着每一行进行反转, 就可以得到结果了.

1 2 3     斜对角线交换     1 4 7     逐行反转      7 4 1
4 5 6 ---------------> 2 5 8 -------------> 8 5 2
7 8 9 3 6 9 9 6 3
/**
* @param {number[][]} matrix
* @return {void} Do not return anything, modify matrix in-place instead.
*/
var rotate = function (matrix) {
const n = matrix.length

for (let i = 0; i < n; i++) {
for (let j = i; j < n; j++) {
;[matrix[i][j], matrix[j][i]] = [matrix[j][i], matrix[i][j]]
}
}

for (let i = 0; i < n; i++) {
matrix[i].reverse()
}
}