题意:
给一个二位数组,将这个数组顺时针旋转90°并输出。只需在原数组上进行操作。
思路:
高中几何思路,虽然我也卡了好久才想出来。。。
假设数组matrix[i][j]的i在x正半轴上,j在y正半轴上,数组是sz*sz大小的。
顺时针旋转90°的结果实际上等同于,先将数组沿x=y对称,再将数组沿x=y对称。也等同于先将数组沿x=-y对称,再沿x=sz/2对称。
代码:
void rotate(vector<vector<int>>& matrix) {
int temp, sz = matrix.size();
//将数组沿x=y对称
for (int i = 0; i<sz; ++i)
for (int j = 0; j < i; ++j)
swap(matrix[i][j], matrix[j][i]);
//将数组沿x=y对称
for (int i = 0; i<sz; ++i)
for (int j = 0; j < sz / 2; ++j)
swap(matrix[i][j], matrix[i][sz - 1 - j]);
}