居然一遍过,我也有点惊呆了,毕竟是个渣渣,参考了蛇形矩阵的走法,所以变量有点多
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; } } } };