题目描述
方法1——借助辅助数组
不难发现旋转后数组的第i列即原来的第n-i-1行,根据此规律拷贝即可。时间复杂度O(n^2),空间复杂度O(n^2)。
核心代码
vector<vector<int> > rotateMatrix(vector<vector<int> > mat, int n) {
// write code here
vector<vector<int> > res;
vector<int> temp;
for(int i=0;i<n;++i)
{
res.push_back(temp);
}
for(int i=0;i<n;++i)
{
for(int j=0;j<n;++j)
{
res[j].push_back(mat[n-i-1][j]);
}
}
return res;
}
方法2——原地操作
原数组先转置(关于对角线对称的元素呼唤),再逐行逆序,等同于顺时针旋转90°。此方法时间复杂度O(n^2),空间复杂度O(1)。
核心代码
vector<vector<int> > rotateMatrix(vector<vector<int> > mat, int n) {
// write code here
for(int i=1;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;
}