给你一个正整数 n ,生成一个包含 1 到 n²所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
public int[][] generateMatrix(int n) {
int[][] matrix=new int[n][n];
//方向矩阵
int[][] directions={{0,1},{1,0},{0,-1},{-1,0}};
boolean[][] visited=new boolean[n][n];
int row=0,column=0;
int direct=0;
for (int i=1;i<=(n*n);i++){
matrix[row][column]=i;
visited[row][column]=true;
int nextRow=row+directions[direct][0];
int nextColumn=column+directions[direct][1];
//遇到这些边界,改变坐标移动方式
if(nextRow<0 || nextRow>=n || nextColumn<0 || nextColumn>=n ||
visited[nextRow][nextColumn] ){
direct=(direct+1)%4;
}
row += directions[direct][0];
column += directions[direct][1];
}
return matrix;
}
方向矩阵directions={{0,1},{1,0},{0,-1},{-1,0}}
是关键。
参考:LeetCode54