Use FSM to simulate the process for filling numbers. Be careful, it must break the loop immediately when i >= n * n.
class Solution(object):
def generateMatrix(self, n):
"""
:type n: int
:rtype: List[List[int]]
"""
board = [[0] * n for _ in range(n)]
i = 1
board[0][0] = 1
y, x = 0, 0
padding_y, padding_x = 0, 0
state = 'right'
while True:
if state == 'right':
if x + 1 >= n - padding_x:
state = 'down'
else:
x += 1
i += 1
board[y][x] = i
elif state == 'down':
if y + 1 >= n - padding_y:
state = 'left'
else:
y += 1
i += 1
board[y][x] = i
elif state == 'left':
if x - 1 < padding_x:
state = 'up'
padding_y += 1
else:
x -= 1
i += 1
board[y][x] = i
elif state == 'up':
if y - 1 < padding_y:
state = 'right'
padding_x +=1
else:
y -= 1
i += 1
board[y][x] = i
if i >= n * n:
break
return board
No comments:
Post a Comment