原题
给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
解法
思想
用一个数组存储移动方向的向量值,撞墙(包括遇到已经走过的值)就改变方向。
代码
class Solution {
public int[][] generateMatrix(int n) {
//右、下、左、上
int[][] direction = new int[][]{{0,1},{1,0},{0,-1},{-1,0}};
int i = 1;
int x = 0,y = 0,dir = 0;
int[][] matrix = new int[n][n];
while(i<=n*n){
matrix[x][y] = i;
int newX = x+direction[dir][0];
int newY = y+direction[dir][1];
//需要改变方向的情况
if(newX>=n||newX<0||newY>=n||newY<0||matrix[newX][newY]!=0){
dir = (dir == 3)?0:dir+1;
}
x = x+direction[dir][0];
y = y+direction[dir][1];
i++;
}
return matrix;
}
}
原创文章,作者:彭晨涛,如若转载,请注明出处:https://www.codetool.top/article/leetcode59-%e8%9e%ba%e6%97%8b%e7%9f%a9%e9%98%b5ii/