大家好,继续刷题,这是一道中等难度的题,来看下题目要求:
思路:
1.我最先想到的是暴力变换,就是从四个角开始循环移动,思路很简单,写起来很麻烦,代码如下:
class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
int len = matrix.size();
int temp;
int num = 0;
int i = len - 1;
for(num = 0;num < (len/2);num++){
for(int j = len - i - 1;j < i;j++){
temp = matrix[len - j - 1][i];
matrix[len - j - 1][i] = matrix[len - i - 1][len - j - 1];
matrix[len - i - 1][len - j - 1] = matrix[j][len - i - 1];
matrix[j][len - i - 1] = matrix[i][j];
matrix[i][j] = temp;
}
i--;
}
}
};
2.后来看了别的大佬的思路,原来矩阵旋转90度是有捷径的,分为两步:
(1)按照主对角线,将对称元素交换
(2)按照列,将对称列元素全部交换
代码如下:
class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
if (matrix.empty())
return;
int n = matrix.size();
//首先,沿主对角线交换元素
for (int i = 0; i < n; i++)
{
for (int j = 0; j <= i; j++)
swap(matrix[i][j], matrix[j][i]);
}
for (int i = 0, j = n - 1; i < j; i++, j--)
{
for (int k = 0; k < n; k++)
swap(matrix[k][i], matrix[k][j]);
}
}
};
学习了,感觉很有用,我们下期见!