题目:
给定一个 n × n 的二维矩阵表示一个图像。
将图像顺时针旋转 90 度。
说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。
示例 1:
给定 matrix = [ [1,2,3], [4,5,6], [7,8,9] ], 原地旋转输入矩阵,使其变为: [ [7,4,1], [8,5,2], [9,6,3] ]
示例 2:
给定 matrix = [ [ 5, 1, 9,11], [ 2, 4, 8,10], [13, 3, 6, 7], [15,14,12,16] ], 原地旋转输入矩阵,使其变为: [ [15,13, 2, 5], [14, 3, 4, 1], [12, 6, 8, 9], [16, 7,10,11] ]
解答:
思路:将矩阵看作由外而内的一个个环组成,每个环有四个边;则一次将每个边按顺序调换即可;当前环结束后操作下一个环;
class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
if(matrix.size()<=0)
return;
int left=0, right=matrix.size()-1;
//由外而内缩小环
while(left<right)
{
rotateOneByOne(matrix,left,right);
++left;
--right;
}
}
public:
//操作当前环
void rotateOneByOne(vector<vector<int>>& matrix, int left, int right)
{
//调换当前环四边的元素
for(int i=0; i<right-left;++i)
{
int temp =matrix[left][left+i];
matrix[left][left+i] = matrix[right-i][left];
matrix[right-i][left] = matrix[right][right-i];
matrix[right][right-i] = matrix[left+i][right];
matrix[left+i][right] = temp;
}
}
};
来源:CSDN
作者:杏壳儿
链接:https://blog.csdn.net/weixin_42077039/article/details/104091534