题目:给你一个正整数 n
,生成一个包含 1
到 n2
所有元素,且元素按顺时针顺序螺旋排列的 n x n
正方形矩阵 matrix
。
示例 1:
输入:n = 3 输出:[[1,2,3],[8,9,4],[7,6,5]]
示例 2:
输入:n = 1 输出:[[1]]
提示:
1 <= n <= 20
------------------------------------------------------------------------------------------------------
螺旋矩阵重点考虑以下四个方面:
1、起始位置
从矩阵左上角开始
2、移动方向
移动方向:右,下,左,上
每次移动到边界,才需要改变方向
3、边界
边界是随着遍历过程而变化的
重点:当行或列遍历结束后,把边界向内移动一个单位
4、结束条件
所有位置都被遍历
class Solution {
public int[][] generateMatrix(int n) {
int[][] result = new int[n][n];
int num=0;
int reNum=n*n;
int row=0,column=0;
int[][] directions={{0,1},{1,0},{0,-1},{-1,0}};
int curent_d=0;
int left=0,right=n-1,up=0,down=n-1;
while(num<reNum){
result[row][column] = num+1;
num++;
if(curent_d==0 && column ==right){//只有满足某一边界条件时才需要操作
curent_d=curent_d+1;
up+=1;
}else if(curent_d==1&&row==down){
curent_d+=1;
right-=1;
}else if(curent_d==2 && column==left){
curent_d+=1;
down-=1;
}else if(curent_d==3 && row==up){
curent_d+=1;
left+=1;
}
curent_d = curent_d%4;
row +=directions[curent_d][0];
column+=directions[curent_d][1];
}
return result;
}
}