以下是 LeetCode 48. 旋转图像 的 C++ 实现,采用转置 + 行反转的方法:
#include<vector>#include<algorithm>classSolution{public:voidrotate(std::vector<std::vector<int>>&matrix){intn=matrix.size();// 1. 转置矩阵(沿主对角线交换)for(inti=0;i<n;++i){for(intj=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),原地修改,仅使用常数级额外空间。
这种方法简洁明了,是本题最优解法之一。