📅  最后修改于: 2023-12-03 15:12:42.157000             🧑  作者: Mango
给定一个 $n \times n$ 的矩阵,请你编写一个函数将其旋转 $90$ 度。
示例:
输入:
[ \begin{bmatrix} 1 & 2 & 3 \ 4 & 5 & 6 \ 7 & 8 & 9 \end{bmatrix} ]
输出:
[ \begin{bmatrix} 7 & 4 & 1 \ 8 & 5 & 2 \ 9 & 6 & 3 \end{bmatrix} ]
说明:
应该直接在原矩阵上原地旋转,不要使用额外的矩阵空间。
在原矩阵上旋转,可以通过对角线翻转和水平翻转的组合实现旋转90度的效果。
先对角线翻转,也就是沿主对角线翻转。例如:
[ \begin{bmatrix} 1 & 2 & 3 \ 4 & 5 & 6 \ 7 & 8 & 9 \end{bmatrix} \Rightarrow \begin{bmatrix} 1 & 4 & 7 \ 2 & 5 & 8 \ 3 & 6 & 9 \end{bmatrix} ]
然后再水平翻转每一行,例如:
[ \begin{bmatrix} 1 & 4 & 7 \ 2 & 5 & 8 \ 3 & 6 & 9 \end{bmatrix} \Rightarrow \begin{bmatrix} 7 & 4 & 1 \ 8 & 5 & 2 \ 9 & 6 & 3 \end{bmatrix} ]
C++ 代码实现:
class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
int n = matrix.size();
for(int i=0; i<n; i++) {
for(int j=0; j<i; j++) {
swap(matrix[i][j], matrix[j][i]);
}
}
for(int i=0; i<n; i++) {
reverse(matrix[i].begin(), matrix[i].end());
}
}
};
Python 代码实现:
class Solution:
def rotate(self, matrix: List[List[int]]) -> None:
"""
Do not return anything, modify matrix in-place instead.
"""
n = len(matrix)
for i in range(n):
for j in range(i):
matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
for row in matrix:
row.reverse()
Java 代码实现:
class Solution {
public void rotate(int[][] matrix) {
int n = matrix.length;
for(int i=0; i<n; i++) {
for(int j=0; j<i; j++) {
int tmp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = tmp;
}
}
for(int i=0; i<n; i++) {
for(int j=0; j<n/2; j++) {
int tmp = matrix[i][j];
matrix[i][j] = matrix[i][n-j-1];
matrix[i][n-j-1] = tmp;
}
}
}
}