class Solution {
public:
vector<vector<int>> rotateMatrix(vector<vector<int>>& mat, int n) {
vector<vector<int>> result(n, vector<int>(n));
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
// 顺时针旋转90度:mat[i][j] -> result[j][n-1-i]
result[j][n - 1 - i] = mat[i][j];
}
}
return result;
}
};
class Solution {
public:
vector<vector<int>> rotateMatrix(vector<vector<int>>& mat, int n) {
// 分层旋转,从外层到内层
for (int layer = 0; layer < n / 2; layer++) {
int first = layer;
int last = n - 1 - layer;
for (int i = first; i < last; i++) {
int offset = i - first;
// 保存上边
int temp = mat[first][i];
// 左边 -> 上边
mat[first][i] = mat[last - offset][first];
// 下边 -> 左边
mat[last - offset][first] = mat[last][last - offset];
// 右边 -> 下边
mat[last][last - offset] = mat[i][last];
// 上边 -> 右边
mat[i][last] = temp;
}
}
return mat;
}
};
class Solution {
public:
vector<vector<int>> rotateMatrix(vector<vector<int>>& mat, int n) {
// 第一步:转置矩阵(沿主对角线翻转)
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
swap(mat[i][j], mat[j][i]);
}
}
// 第二步:水平翻转每一行
for (int i = 0; i < n; i++) {
for (int j = 0; j < n / 2; j++) {
swap(mat[i][j], mat[i][n - 1 - j]);
}
}
return mat;
}
};
算法分析
方法一(使用额外空间):
- 时间复杂度:O(N²),需要遍历所有元素
- 空间复杂度:O(N²),需要额外的N×N矩阵
方法二(分层旋转):
- 时间复杂度:O(N²)
- 空间复杂度:O(1),只使用常数个临时变量
方法三(转置+翻转):
- 时间复杂度:O(N²)
- 空间复杂度:O(1)

京公网安备 11010502036488号