居然一遍过,我也有点惊呆了,毕竟是个渣渣,参考了蛇形矩阵的走法,所以变量有点多
class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
//控制移的是第几圈
for(int i=0;i<=matrix.size()/2;i++){
//控制这一圈有几个需要移动
int step=matrix.size()-2*i-1;
for(int j=i;j<matrix.size()-i-1;j++){
//一定注意右边界是matrix.size()-i-1
//每次移动的是ij这个位置的值,环形移动四次,一共走step步
//定义变量,开始的(sx,sy),走step步之后到了(ex,ey),这两个交换
//交换之后,(ex,ey)-->(sx,sy)继续下一次
//change 需要替换的值 tmp 临时存储的值
//第一次 先往右再往下
int ex=i,ey=j;
int count=step,tmp=0;
int chang=matrix[ex][ey];
while(count--){
//没到右边界,就一直往右走
if(ey!=matrix.size()-i-1){
ey++;
}else{
ex++;
}
}
//处理替换
tmp=matrix[ex][ey];
matrix[ex][ey]=chang;
chang=tmp;
//第二次 先往下再往左
count=step;
while(count--){
//没到下边界,就一直往下走
if(ex!=matrix.size()-i-1){
ex++;
}else{
ey--;
}
}
//处理替换
tmp= matrix[ex][ey];
matrix[ex][ey]=chang;
chang=tmp;
//第三次 先往左再往上
count=step;
while(count--){
//没到左边界,就一直往左走
if(ey!=i){
ey--;
}else{
ex--;
}
}
//处理替换
tmp= matrix[ex][ey];
matrix[ex][ey]=chang;
chang=tmp;
//第四次 先往上再往右
count=step;
while(count--){
//没到上边界,就一直往上走
if(ex!=i){
ex--;
}else{
ey++;
}
}
//处理替换
tmp=matrix[ex][ey];
matrix[ex][ey]=chang;
chang=tmp;
}
}
}
};
京公网安备 11010502036488号