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 =
You should return the following matrix:
Spiral Matrixと似ていますが、今回は対応する行列を生成し、行列は方形行列です.
再帰的な考え方で,外回りを生成するたびに規模を縮小し,開始シーケンス番号を修正することができる.
元のSpiral Matrixで採用した方法を用いて、各要素を順次記入することもできます.
コード:
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;
}
};