leetcode 48 旋转图像 (C语言

给定一个 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]
]

我想了想,觉得直接变换太难想,后来发现先把第一个矩阵转置一下,就变成了这样

原来的矩阵:
[
[1,2,3],
[4,5,6],
[7,8,9]
],
现在的矩阵
[
[1,4,7]
[2,5,8]
[3,6,9]
]
发现只需要将第一列和最后一列交换,第二列和倒数第二列交换,以此类推,就得到了我们想要的矩阵。下面是代码

void rotate(int** matrix, int matrixRowSize, int *matrixColSizes) 
{
    if(matrixRowSize>=2)
    {
        int i,j,k,time=1,temp;
        for(i=1;i<=time;i++)
        {
            for(j=0;j<time;j++)
            {
                temp=matrix[i][j];
                matrix[i][j]=matrix[j][i];
                matrix[j][i]=temp;
            }
            time++;
            if(time==matrixRowSize)
                break;
        }

        time=matrixRowSize/2; 
        for(i=0;i<matrixRowSize;i++)
        {
            for(j=0,k=matrixRowSize-1;j<time;j++,k--)
            {
                temp=matrix[i][j];
                matrix[i][j]=matrix[i][k];
                matrix[i][k]=temp;
            }
        }
    }


}

不过这里我不太清楚这个参数的意思 int *matrixColSizes,代码中也没有用到,有些不解。求大神指教。

猜你喜欢

转载自blog.csdn.net/weixin_42326299/article/details/82050617