这题可以将一个矩阵从外向内旋转,把一个矩阵看成一圈圈的框,将一个框拆成四条边,如下图所示,对于一个边长为n的矩阵,最多有n/2个框,对于奇数n来说,最后中心的一个点是不需要旋转的,旋转的规则看下面代码,这没有其他的办法只有仔细的思考

class Solution
{
public:
void rotate(vector<vector<int>> &matrix)
{
for (int i = 0; i < matrix.size() / 2; i++)
{
// 交换四条边框
for (int j = 0; j < matrix.size() - 1 - 2 * i; j++)
{
int temp;
temp = matrix[j + i][i];
// 下->左
matrix[j + i][i] = matrix[matrix.size() - 1 - i][j + i];
// 右->下
matrix[matrix.size() - 1 - i][i + j] = matrix[matrix.size() - 1 - i - j][matrix.size() - 1 - i];
// 上->右
matrix[matrix.size() - 1 - i - j][matrix.size() - 1 - i] = matrix[i][matrix.size() - 1 - i - j];
// 左->上
matrix[i][matrix.size() - 1 - i - j] = temp;
}
}
}
};