题目:旋转矩阵
题目描述:
给定一幅由N × N矩阵表示的图像,其中每个像素的大小为4字节,编写一种方法,将图像旋转90度。不占用额外内存空间能否做到?
示例输入:
给定 matrix =
[
[1,2,3],
[4,5,6],
[7,8,9]
]
示例输出:
原地旋转输入矩阵,使其变为:
[
[7,4,1],
[8,5,2],
[9,6,3]
]
题解
要想让矩阵旋转90度,可以先让矩阵左右对换,然后再让矩阵沿对角线两两对换。
代码:
class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
int i,j;
int temp;
int n=matrix[0].size();
for(i=0;i<n;i++) //左右互换
{
for(j=0;j<n/2;j++)
{
temp=matrix[i][j];
matrix[i][j]=matrix[i][n-1-j];
matrix[i][n-1-j]=temp;
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n-i;j++)
{
temp=matrix[i][j];
matrix[i][j]=matrix[n-1-j][n-1-i];
matrix[n-1-j][n-1-i]=temp;
}
}
}
};
执行用时 :4 ms, 在所有 C++ 提交中击败了76.32%的用户
内存消耗 :9.1 MB, 在所有 C++ 提交中击败了100.00%的用户