题目描述
给定一个 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].length
1 <= n <= 20
-1000 <= matrix[i][j] <= 1000
做题思路
这个题目是一个找规律的题目
这里我记录一下:直接给出结论
一个n*n的二维矩阵,
顺时针旋转90度
:先上下交换,再根据主对角线交换
逆时针旋转90度
:先左右交换,在再根据主对角线交换只要你知道这两个性质,那么对于n*n旋转这类题目我觉得就都不在话下了!
因为我这一次操作的度数是90度,如果让你不管是顺时针还是逆时针旋转 (90度 * n)
的话,你只要用一个循环,循环的次数是n就行了!!!
代码实现
class Solution {
public void rotate(int[][] matrix) {
int n=matrix.length;
for(int i=0;i<n>>1;i++){
for(int j=0;j<n;j++){
swap(matrix,i,j,n-i-1,j);
}
}
for(int i=0;i<n;i++){
for(int j=0;j<i;j++){
swap(matrix,i,j,j,i);
}
}
}
public void swap(int[][] matrix,int a,int b,int c,int d){
int tem=matrix[a][b];
matrix[a][b]=matrix[c][d];
matrix[c][d]=tem;
}
}