LeetCode 面试题 01.07. 旋转矩阵
面试题 01.07. 旋转矩阵
难度中等
给你一幅由 N × N
矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 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度并且不利用数组,那我们可以将每个位置旋转的规律找出来,可以发现,将一个位置的元素彻底转换,经过了四个过程。
我们可以先将最外层的元素都转换好,在进行次外层,次次外层,依次。。。
然后就是两层循环的条件啦,由于我们跑一圈只需要遍历一行元素,所以,总行数/2;内层循环是考虑的列,画图可知,我们转换内层元素需要将两头掐掉,所以要减去外层循环数。
代码如下:
1 void rotate(int** matrix, int matrixSize, int* matrixColSize){ 2 int i,j,temp; 3 for(i=0;i<matrixSize/2;i++){ 4 for(j=i;j<*matrixColSize-i-1;j++){ 5 temp=matrix[i][j]; 6 matrix[i][j]=matrix[matrixSize-j-1][i]; 7 matrix[matrixSize-j-1][i]=matrix[matrixSize-i-1][*matrixColSize-j-1]; 8 matrix[matrixSize-i-1][*matrixColSize-j-1]=matrix[j][*matrixColSize-i-1]; 9 matrix[j][*matrixColSize-i-1]=temp; 10 } 11 } 12 return rotate; 13 }