牛客题:旋转图像
题目:
给出一个用二维矩阵表示的图像,返回该图像顺时针旋转90度的结果。
扩展:
你能使用原地算法解决这个问题么?
解法(C++):
解题思路:先转置,再水平镜像
class Solution {
public:
void rotate(vector<vector<int> > &matrix) {
// m 为行, n 为列
int m = matrix.size(), n = matrix[0].size();
// 先转置
for (int i = 1; i < m; i++) {
for (int j = 0; j < i; j++) {
swap(matrix[i][j], matrix[j][i]);
}
}
// 镜像, n行m列
for (int i = 0; i < m / 2; i++) {
for (int j = 0; j < n; j++) {
swap(matrix[j][i], matrix[j][m-1-i]);
}
}
}
};
时间复杂度 O ( n 2 ) O(n^2) O(n2),空间复杂度 O ( 1 ) O(1) O(1)。