一、题目描述:
给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。
你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。
二、思路
三、代码
最开始的
class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
int row = matrix.size();
int col = matrix[0].size();
int temp;
for (int i = 0; i < row / 2; i++)
{
for (int j = i; j < col - i-1; j++)
{
cout << "i= " << i << " , j = " << j << endl;
if (i == j)
{
//这里的if是多余的,最开始的时候没能很好的确定坐标点,所以还分了情况
//后面通过画图确定了坐标后,用下面else的代码就可以覆盖完全情况
//所以这个if语段可以删掉
temp = matrix[i][j];
matrix[i][j] = matrix[row - i - 1][j];
matrix[row - i - 1][j] = matrix[row - i - 1][col - j - 1];
matrix[row - i - 1][col - j - 1] = matrix[i][col - j - 1];
matrix[i][col - j - 1] = temp;
}
else
{
temp = matrix[i][j];
matrix[i][j] = matrix[row - j - 1][i];
matrix[row - j - 1][i] = matrix[row - i - 1][col - j - 1];
matrix[row - i - 1][col - j - 1] = matrix[j][col - i - 1];
matrix[j][col - i - 1] = temp;
}
}
}
}
};
提交版本
#include<iostream>
using namespace std;
class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
int row = matrix.size();
int col = matrix[0].size();
int temp;
for (int i = 0; i < row / 2; i++)
{
for (int j = i; j < col - i-1; j++)
{
temp = matrix[i][j];
matrix[i][j] = matrix[row - j - 1][i];
matrix[row - j - 1][i] = matrix[row - i - 1][col - j - 1];
matrix[row - i - 1][col - j - 1] = matrix[j][col - i - 1];
matrix[j][col - i - 1] = temp;
}
}
}
};
int main()
{
vector<vector<int>> matrix = { {5, 1, 9, 11},{2, 4, 8, 10},{13, 3, 6, 7},{15, 14, 12, 16} };
Solution solution;
solution.rotate(matrix);
cout << matrix[0][0] << endl;
return 0;
}