LeetCode Spiral Matrix II


タイトル
Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.
For example, Given n = 3 ,
You should return the following matrix:
[
 [ 1, 2, 3 ],
 [ 8, 9, 4 ],
 [ 7, 6, 5 ]
]

 
Spiral Matrixと似ていますが、今回は対応する行列を生成し、行列は方形行列です.
再帰的な考え方で,外回りを生成するたびに規模を縮小し,開始シーケンス番号を修正することができる.
元のSpiral Matrixで採用した方法を用いて、各要素を順次記入することもできます.
 
コード:
class Solution {
public:
    vector<vector<int> > generateMatrix(int n) {
        vector<vector<int>> matrix(n,vector<int>(n,0));
		int x1=0,y1=0,x2=0,y2=n-1,x3=n-1,y3=n-1,x4=n-1,y4=0;	//     4     
		int i,num=1;
		while(1)
		{
			if(y1<=y2)	//y  
			{
				for(i=y1;i<=y2;i++)
					matrix[x1][i]=num++;
				x1++;
				y1++;
				x2++;
			}
			else break;
			if(x2<=x3)	//x  
			{
				for(i=x2;i<=x3;i++)
					matrix[i][y2]=num++;
				y2--;
				y3--;
				
			}
			else break;
			if(y3>=y4)	//y  
			{
				for(i=y3;i>=y4;i--)
					matrix[x3][i]=num++;
				x3--;
				x4--;
			}
			else break;
			if(x4>=x1)	//x  
			{
				for(i=x4;i>=x1;i--)
					matrix[i][y4]=num++;
				y4++;
			}
			else break;
		}
		return matrix;
    }
};