給定 n×n 矩陣,原地順時針旋轉 90 度。
順時針 90° = **左右翻轉** + **主對角線翻轉**
或:**上下翻轉** + **副對角線翻轉**
或:**轉置** + **每行反轉**
void rotate(vector>& matrix) {
int n = matrix.size();
// 轉置:swap(matrix[i][j], matrix[j][i]) for i
void rotate(vector>& matrix) {
int n = matrix.size();
for (int layer = 0; layer < n/2; ++layer) {
int first = layer, last = n - 1 - layer;
for (int i = first; i < last; ++i) {
int offset = i - first;
int top = matrix[first][i];
// left -> top
matrix[first][i] = matrix[last-offset][first];
// bottom -> left
matrix[last-offset][first] = matrix[last][last-offset];
// right -> bottom
matrix[last][last-offset] = matrix[i][last];
// top -> right
matrix[i][last] = top;
}
}
}