本文已参与[新人创作礼]活动,一起开启掘金创作之路
48.旋转图像
核心是找到规律
1.假设 初始2 的坐标为(0,1)
经过顺时针旋转后 2的坐标为(1,2)
2.第一行的第 2 个元素在旋转后恰好是倒数第一列的第 2个元素。
3.所以
对于矩阵中的第二行而言,在旋转后,它出现在倒数第二列的位置
对于矩阵中的第三行和第四行同理。
对于矩阵中第 i 行的第 j 个元素,在旋转后,它出现在倒数第 i 列的 第 j 个位置。
用代码表示matrix[j][matrixSize-1-i]=matrix[i][j];
void rotate(int** matrix, int matrixSize, int* matrixColSize){
int new[matrixSize][matrixSize]; //定义一个新的矩阵(数组)
for(int i=0;i<matrixSize;i++)
{
for(int j=0;j<matrixSize;j++)
{
new[j][matrixSize-1-i]=matrix[i][j];
}
}
for(int m=0;m<matrixSize;m++) //因为题目要求不能用另一个矩阵来表示
{ //所以令原矩阵等于新定义的矩阵
for(int n=0;n<matrixSize;n++)
{
matrix[m][n]=new[m][n];
}
}
}