【题目概要】
面试题 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,矩阵是方形的
【代码示例】
void rotate(int** matrix, int matrixSize, int* matrixColSize){
for(int i=0; i<matrixSize/2; i++) //总共循环的次数,也是每次行的标志
{
for(int j=i; j< matrixSize-i-1; j++) // 每一行中需要循环的次数
{
int temp = matrix[i][matrixSize-j-1];
matrix[i][matrixSize-j-1] = matrix[j][i];
matrix[j][i] = matrix[matrixSize-i-1][j];
matrix[matrixSize-i-1][j] = matrix[matrixSize-j-1][matrixSize-i-1];
matrix[matrixSize-j-1][matrixSize-i-1] = temp;
}
}
}