模拟螺旋,每次自增一。
思路:
每一圈都是以右下左上为方向进行模拟的,
在二维数组中[i][j],右代表 j++;下代表 i++;左代表 j--;上代表 i--;
什么时候转变状态?数组越界或者已经覆盖过的数组。
细节:
4种状态用1,2,3,4表示;
每次转变状态后进行取余运算(%4);
代码如下:
class Solution { public: vector<vector<int>> generateMatrix(int n) { vector<vector<int>> ret(n,vector<int>(n,0)); int num=1,Max=n*n; int i=0,j=0,dirc=0; while(num<=Max){ ret[i][j]=num++; if(dirc==0){ if(j+1<n&&!ret[i][j+1]) j++; else { i++; dirc=(dirc+1)%4; } } else if(dirc==1){ if(i+1<n&&!ret[i+1][j]) i++; else { j--; dirc=(dirc+1)%4; } } else if(dirc==2){ if(j-1>=0&&!ret[i][j-1]) j--; else { i--; dirc=(dirc+1)%4; } } else if(dirc==3){ if(i-1>=0&&!ret[i-1][j]) i--; else { j++; dirc=(dirc+1)%4; } } } return ret; } };