题目描述:
给定一个 n × n 的二维矩阵表示一个图像。
将图像顺时针旋转 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] ]
解题思路:
这个需要一番数学推倒的,看了一下别人的思路很巧妙,地址在代码的注释里,这里偷懒粘贴一下,如下:
通过实际数据分析,通过两个步骤的元素交换可实现目标:
- 按照主对角线,将对称元素交换
- 按照列,将对称列元素全部交换
即可达到,使得二维矩阵,本地旋转90个角度。
代码实现(Java语言):
//https://blog.youkuaiyun.com/fly_yr/article/details/48139675
class Solution {
public void rotate(int[][] matrix) {
for(int i=0;i<matrix.length;i++){
for(int j=0;j<i;j++){
swap(matrix,i,j,j,i);
}
}
for(int j=0;j<matrix[0].length/2;j++){
for(int i=0;i<matrix.length;i++){
swap(matrix,i,j,i,matrix.length-1-j);
}
}
}
public void swap(int[][] nums,int i,int j,int m,int n){
int temp = nums[i][j];
nums[i][j] = nums[m][n];
nums[m][n] = temp;
}
}