描述
有一个NxN整数矩阵,请编写一个算法,将矩阵顺时针旋转90度。
给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转后的NxN矩阵。
数据范围:0<n<3000<n<300,矩阵中的值满足 0≤val≤10000≤val≤1000
要求:空间复杂度 O(N2)O(N2),时间复杂度 O(N2)O(N2)
进阶:空间复杂度 O(1)O(1),时间复杂度 O(N2)O(N2)
思路:矩阵先顺时针旋转再每行颠倒就变成了一个举证的转置,那么求顺时针旋转后的矩阵,只需要先转置再颠倒。
class Solution {
public:
vector<vector<int> > rotateMatrix(vector<vector<int> >& mat, int n) {
// write code here
//矩阵转置
for(int i=0;i<n;i++)
{
for(int j=0;j<i;j++)//只交换一个三角形
{
swap(mat[i][j],mat[j][i]);
}
}
//交换每行
for(int i=0;i<n;i++)
{
reverse(mat[i].begin(),mat[i].end());
}
return mat;
}
};
总结:学会矩阵的转置和每行元素颠倒