图片说明

居然一遍过,我也有点惊呆了,毕竟是个渣渣,参考了蛇形矩阵的走法,所以变量有点多

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;            
            }
        }
    }
};