应用题-数组专题-螺旋矩阵
**很直观的做法**
```python
class Solution:
def generateMatrix(self, n: int) -> List[List[int]]:
ans = [ [ 0 for _ in range( n ) ] for _ in range( n ) ]
# 右边界 下边界 左边界 上边界
r, b, l, t = n - 1, n - 1, 0, 0
# 模拟
value = 1
while value <= n * n:
# 向右
for k in range( l, r + 1 ):
ans[ t ][ k ] = value
value += 1
t += 1
if value > n * n: break
# 向下
for k in range( t, b + 1 ):
ans[ k ][ r ] = value
value += 1
r -= 1
if value > n * n: break
# 向左
for k in range( r, l - 1, -1 ):
ans[ b ][ k ] = value
value += 1
b -= 1
if value > n * n: break
# 向上
for k in range( b, t - 1 , -1 ):
ans[ k ][ l ] = value
value += 1
l += 1
return ans
```
**边界条件简化 推荐做法**
```python
class Solution:
def generateMatrix(self, n: int) -> List[List[int]]:
ans = [ [ 0 for _ in range( n ) ] for _ in range( n ) ]
# 右边界 下边界 左边界 上边界
r, b, l, t = n - 1, n - 1, 0, 0
# 模拟
value = 1
while l <= r and t <= b:
# 向右
for k in range( l, r + 1 ):
ans[ t ][ k ] = value
value += 1
t += 1
# 向下
for k in range( t, b + 1 ):
ans[ k ][ r ] = value
value += 1
r -= 1
if t <= b: # for循环中可以约束 l <= r 所以简化判断条件为 t <= b
# 向左
for k in range( r, l - 1, -1 ):
ans[ b ][ k ] = value
value += 1
b -= 1
if l <= r: # for循环中可以约束 t <= b 所以简化判断条件为 l <= r
# 向上
for k in range( b, t - 1 , -1 ):
ans[ k ][ l ] = value
value += 1
l += 1
return ans
```