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

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

输入: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 == matrix.length == matrix[i].length1 <= n <= 20-1000 <= matrix[i][j] <= 1000假如元素位置是:[i, j] 的话,由给的例子中可以观察到,元素位置经过旋转后,位置由第 i 行,第 j 个,变为倒数第 i 行 ,第 j 个。(这里说的是位置,而不是元素下标)
将其位置转换为对应的下标,即:元素由 [i, j],变为 [j, nums.length - 1 - i]。
这既是旋转前后元素对应的坐标变化。
根据旋转的特性可以知道,每次旋转,类似于这样的情况(以矩阵长度为4 举例) :
A -> B , B -> C, C -> D, D -> A
这里官方题解,解释的很好,可以参考官方题解。
代码:
const rotate = (matrix) => {
const n = matrix.length;
for (let i = 0; i < Math.floor(n / 2); i++) { // 竖向的限制
for (let j = 0; j < Math.floor((n + 1) /2); j++) { // 横向循环的限制
[
matrix[j][n - 1 - i], matrix[n - 1 - i][n - 1 - j], matrix[n - 1 - j][i], matrix[i][j] // 旋转后的位置
]
=
[
matrix[i][j], matrix[j][n - 1 - i], matrix[n - 1 - i][n - 1 - j], matrix[n - 1 - j][i] // 对应旋转前的位置
]
}
}
return matrix
}