题目
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
示例 1:
输入:n = 3 输出:[[1,2,3],[8,9,4],[7,6,5]]
示例 2:
输入:n = 1 输出:[[1]]
解题
方法一:生成矩阵然后按遍历(模拟)
和LC 螺旋矩阵用类似的方法,此题只不过生成矩阵是提前生成好矩阵,然后去遍历它。
python解法
class Solution: def generateMatrix(self, n: int) -> List[List[int]]: matrix = [[0]*n for _ in range(n)] cur_d = 0 dirs = [(0,1),(1,0),(0,-1),(-1,0)] x,y = 0,0 left,right,up,down = 0,n-1,0,n-1 num = 1#记录数量和写入矩阵的数 while num<=n*n: matrix[x][y]=num num+=1 if cur_d==0 and y==right: cur_d+=1 up+=1 elif cur_d==1 and x==down: cur_d+=1 right-=1 elif cur_d==2 and y==left: cur_d+=1 down-=1 elif cur_d==3 and x==up: cur_d+=1 left+=1 cur_d%=4 x += dirs[cur_d][0] y += dirs[cur_d][1] return matrix
c++解法
class Solution { public: vector<vector<int>> generateMatrix(int n) { vector<vector<int>> matrix(n,vector<int>(n)); vector<vector<int>> dirs={{0,1},{1,0},{0,-1},{-1,0}}; int left=0,right=n-1,top=0,down=n-1; int cur_d=0; int x=0,y=0; for(int i=1;i<n*n+1;i++){ matrix[x][y]=i; if(cur_d==0&&y==right){ top++; cur_d++; } else if(cur_d==1&&x==down){ right--; cur_d++; } else if(cur_d==2&&y==left){ down--; cur_d++; } else if(cur_d==3&&x==top){ left++; cur_d++; } cur_d%=4; x+=dirs[cur_d][0]; y+=dirs[cur_d][1]; } return matrix; } };
java解法
class Solution { public int[][] generateMatrix(int n) { int[][] matrix=new int[n][n]; int[][] dirs={{0,1},{1,0},{0,-1},{-1,0}}; int curdir=0; int top=0,down=n-1,left=0,right=n-1; int x=0,y=0; for(int i=0;i<n*n;i++){ matrix[x][y]=i+1; if(curdir==0&&y==right){ top++; curdir++; }else if(curdir==1&&x==down){ right--; curdir++; }else if(curdir==2&&y==left){ down--; curdir++; }else if(curdir==3&&x==top){ left++; curdir++; } curdir%=4; x+=dirs[curdir][0]; y+=dirs[curdir][1]; } return matrix; } }