暴力解法
螺旋矩阵,边界条件有点多,要好好分析才可以
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; } };
标签:977,count,startx,starty,59,--,res,int From: https://www.cnblogs.com/bojiandkake/p/17045333.html