一、题目描述
给你一个正整数 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
二、解题思路
整体采用构建矩阵,填充矩阵的思路,填充过程分为四种情况:
从左到右填充一行 从上到下填充一列 从右到左填充一行 从下到上填充一列
三、代码
代码语言:javascript复制public class Solution {
public int[][] generateMatrix(int n) {
int[][] rs = new int[n][n];
int k=0;
int m=1;
int i,j;
while(k<n/2){
for(j=k;j<n-k;j ){
rs[k][j]=m ;
}
for(i=k 1,j--;i<n-k;i ){
rs[i][j]=m ;
}
for(i--,j--;j>k;j--){
rs[i][j]=m ;
}
for(;i>k;i--){
rs[i][j]=m ;
}
k ;
}
if(n%2==1){
rs[n/2][n/2]=m ;
}
return rs;
}
public static void main(String[] args) {
Solution solution=new Solution();
int n=3;
int[][] rs=solution.generateMatrix(n);
for(int i=0;i<n;i ){
for(int j=0;j<n;j ){
System.out.print(rs[i][j]);
System.out.print(",");
}
System.out.println();
}
}
}
四、复杂度分析
时间复杂度:O(n^2),其中 n 是给定的正整数。矩阵的大小是n×n,需要填入矩阵中的每个元素。
空间复杂度:O(1),除了返回的矩阵以外,空间复杂度是常数。