給定 n x n 矩陣,順時針旋轉 90 度,要求 原地 操作。
觀察發現:順時針 90° = 沿副對角線翻轉 + 沿水平中線翻轉。

class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
int n = matrix.size();
// 沿副對角線翻轉
for (int i = 0; i < n; ++i)
for (int j = 0; j < n - i; ++j)
swap(matrix[i][j], matrix[n-1-j][n-1-i]);
// 沿水平中線翻轉
for (int i = 0; i < n/2; ++i)
for (int j = 0; j < n; ++j)
swap(matrix[i][j], matrix[n-1-i][j]);
}
};
O(n²),必須覆蓋所有元素。O(1),原地交換。