题目要求
You are given an n x n 2D matrix representing an image.
Rotate the image by 90 degrees (clockwise).
Follow up:
Could you do this in-place?
也就是在不创造一个新的数组的情况下,将一个二维数组中的元素顺时针旋转90度
解题思路
其实如果我们现在假设有一个N*N的数组,我们可以将其想象为N个正方形,每个正方形的边长分别为N,N-1,N-2...2,1。每一次的旋转,其实都是正方形上的四个元素之间的相互替换。所以本质上我们只需遍历每种长度正方形上的一条边,就可以完成这个正方形的旋转。最后实现整个数组矩阵的旋转
public void rotate(int[][] matrix) {
int length = matrix.length;
//i代表正方形的起始位置,i=0即(0,0),i=1即(1,1)
for(int i = 0 ; i < length/2 ; i++){
//j代表当前正方形上的一条边上的一个点。
for(int j = i ; j<length-i-1 ; j++){
int temp = matrix[i][j];
matrix[i][j] = matrix[length-j-1][i];
matrix[length-j-1][i] = matrix[length-i-1][length-j-1];
matrix[length-i-1][length-j-1] = matrix[j][length-i-1];
matrix[j][length-i-1] = temp;
}
}
}
想要了解更多开发技术,面试教程以及互联网公司内推,欢迎关注我的微信公众号!将会不定期的发放福利哦~
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。