DeepSeek 专家 LeetCode 48. 旋转图像 C++实现
·
以下是 LeetCode 48. 旋转图像 的 C++ 实现,采用转置 + 行反转的方法:
#include <vector>
#include <algorithm>
class Solution {
public:
void rotate(std::vector<std::vector<int>>& matrix) {
int n = matrix.size();
// 1. 转置矩阵(沿主对角线交换)
for (int i = 0; i < n; ++i) {
for (int j = i + 1; j < n; ++j) {
std::swap(matrix[i][j], matrix[j][i]);
}
}
// 2. 反转每一行
for (auto& row : matrix) {
std::reverse(row.begin(), row.end());
}
}
};
思路说明
顺时针旋转 90 度等价于先对矩阵进行转置,再将每一行反转。
· 转置:交换 matrix[i][j] 和 matrix[j][i],使行列互换。
· 行反转:每行元素顺序颠倒,即完成 90° 顺时针旋转。
例如:
原矩阵:
[1,2,3]
[4,5,6]
[7,8,9]
转置后:
[1,4,7]
[2,5,8]
[3,6,9]
行反转后:
[7,4,1]
[8,5,2]
[9,6,3]
复杂度分析
· 时间复杂度:O(n²),转置遍历上三角 O(n²/2),反转每行 O(n²)。
· 空间复杂度:O(1),原地修改,仅使用常数级额外空间。
这种方法简洁明了,是本题最优解法之一。

更多推荐




所有评论(0)