day2-双指针-977--59

 

暴力解法

 

 

 

 

 

 

螺旋矩阵,边界条件有点多,要好好分析才可以

 

 

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        vector<vector<int>> res(n,vector<int>(n,0));
        int startx=0,starty=0;//定义每循环一个圈的起始位置
        int loop=n/2;
        //每个圈循环几次,例如n为奇数3,那么loop=1
        //只循环一圈,矩阵中间的值需要单独处理
        int mid=n/2;//矩阵中间的位置,例如n为奇数3
        //中间的位置就是(1,1),n为5,中间的位置为(2,2)
        int count=1;//用来给矩阵中的每一个空格赋值
        int offset=1;//需要控制每一条边遍历的长度
        //每次循环右边界收缩一位
        int i,j;
        while(loop--){
            i=startx;
            j=starty;
            //下面开始的四个for就是模拟转了一圈
            //模拟填充上行从左到右(左闭右开)
            for(j=starty;j<n-offset;j++){
                res[startx][j]=count++;
            }
            //模拟填充右列从上到下,左闭右开
            for(i=startx;i<n-offset;i++){
                res[i][j]=count++;
            }
            //模拟填充下行从右到左,左闭右开
            for(;j>starty;j--){
                res[i][j]=count++;
            }
            //模拟填充左列,从下到上
            for(;i>startx;i--){
                res[i][j]=count++;
            }
            //第二圈开始的时候,起始位置要各自+1
            //例如第一圈的起始位置是(0,0)
            //第2圈的起始位置是(1,1)
            startx++;
            starty++;
            //offset控制每一圈里每一条边遍历的长度
            offset+=1;
        }
        //如果n为奇数的话,需要单独给矩阵最中间的位置赋值
            if(n%2){
                res[mid][mid]=count;
            }
            return res;
    }
};

 

我好像懂了,哈哈哈哈,开心~~~要及时复习,不然会忘记的~~1/13号要复习。

 

posted @ 2023-01-12 06:47  今天也是开心的一天呀  阅读(71)  评论(0)    收藏  举报