Merge pull request #677 from RyouMon/master

优化 0059.螺旋矩阵II.md Python3解法
This commit is contained in:
程序员Carl
2021-08-30 10:11:24 +08:00
committed by GitHub

View File

@ -191,33 +191,48 @@ class Solution {
python: python:
```python ```python3
class Solution: class Solution:
def generateMatrix(self, n: int) -> List[List[int]]: def generateMatrix(self, n: int) -> List[List[int]]:
left, right, up, down = 0, n-1, 0, n-1 # 初始化要填充的正方形
matrix = [ [0]*n for _ in range(n)] matrix = [[0] * n for _ in range(n)]
num = 1
while left<=right and up<=down: left, right, up, down = 0, n - 1, 0, n - 1
# 填充左到右 number = 1 # 填充的数字
for i in range(left, right+1):
matrix[up][i] = num while left < right and up < down:
num += 1
up += 1 # 从左到右填充上边
# 填充上到下 for x in range(left, right):
for i in range(up, down+1): matrix[up][x] = number
matrix[i][right] = num number += 1
num += 1
right -= 1 # 从上到下填充右边
# 填充右到左 for y in range(up, down):
for i in range(right, left-1, -1): matrix[y][right] = number
matrix[down][i] = num number += 1
num += 1
down -= 1 # 从右到左填充下边
# 填充下到上 for x in range(right, left, -1):
for i in range(down, up-1, -1): matrix[down][x] = number
matrix[i][left] = num number += 1
num += 1
# 从下到上填充左边
for y in range(down, up, -1):
matrix[y][left] = number
number += 1
# 缩小要填充的范围
left += 1 left += 1
right -= 1
up += 1
down -= 1
# 如果阶数为奇数,额外填充一次中心
if n % 2:
matrix[n // 2][n // 2] = number
return matrix return matrix
``` ```