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()
}
}