题目:
给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3
输出:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
代码:
class Solution {
public int[][] generateMatrix(int n) {
int[][] ans=new int[n][n];
int[] dr={0,1,0,-1};
int[] dc={1,0,-1,0};
int r=0,c=0,di=0;
for(int i=1;i<=n*n;i++){
ans[r][c]=i;
int cr=r+dr[di];
int cc=c+dc[di];
if(cc>=0&&cr>=0&&cc<n&&cr<n&&ans[cr][cc]==0){
r=cr;
c=cc;
}else{
di=(di+1)%4;
r+=dr[di];
c+=dc[di];
}
}
return ans;
}
}
思路:
和螺旋矩阵的思路是一样的,绘制螺旋轨迹路径,当路径超出界限或者进入之前访问过的单元格时,会顺时针旋转方向。
复杂度分析:
复杂度分析
时间复杂度:
O
(
n
2
)
O(n^2)
O(n2),因为我们将1-
n
2
n^2
n2每个元素都添加进数组里。
空间复杂度:
O
(
n
2
)
O(n^2)
O(n2),需要ans 存储所需信息。