题目:
题目链接: https://leetcode-cn.com/problems/spiral-matrix-ii/
解题思路:
类似第54题: https://blog.csdn.net/songyuwen0808/article/details/105152189
预先生成一个n * n的矩阵
然后根据当前遍历方向,设置不同的状态,进行不同的处理
考虑好遍历是的下标就好
状态枚举值说明:
0 : 从左到右
1 : 从上到下
2 : 从右到左
3 : 从下到上
设cycle_num为当前转圈次数,则不同状态下的x、y下标为:
0 : x = cycle_num, y = range(cycle_num, n - cycle_num)
1 : x = range(cycle_num + 1, n - cycle_num), y = 0 - cycle_num - 1
2 : x = 0 - cycle_num - 1, y = range(n - cycle_num - 2, cycle_num - 1, -1)
3 : x = range(n - cycle_num - 2, cycle_num, -1), y = cycle_num
代码实现:
class Solution:
def generateMatrix(self, n: int) -> List[List[int]]:
state, cycle_num = 0, 0
res = [[0 for _ in range(n)] for _ in range(n)]
curr_num = 1
while curr_num <= pow(n, 2):
if state == 0:
for index in range(cycle_num, n - cycle_num):
res[cycle_num][index] = curr_num
curr_num += 1
state = 1
elif state == 1:
for index in range(cycle_num + 1, n - cycle_num):
res[index][0 - cycle_num - 1] = curr_num
curr_num += 1
state = 2
elif state == 2:
for index in range(n - cycle_num - 2, cycle_num - 1, -1):
res[0 - cycle_num - 1][index] = curr_num
curr_num += 1
state = 3
elif state == 3:
for index in range(n - cycle_num - 2, cycle_num, -1):
res[index][cycle_num] = curr_num
curr_num += 1
state = 0
cycle_num += 1
return res
删除state后的逻辑:
class Solution:
def generateMatrix(self, n: int) -> List[List[int]]:
state, cycle_num = 0, 0
res = [[0 for _ in range(n)] for _ in range(n)]
curr_num = 1
while curr_num <= pow(n, 2):
for index in range(cycle_num, n - cycle_num):
res[cycle_num][index] = curr_num
curr_num += 1
for index in range(cycle_num + 1, n - cycle_num):
res[index][0 - cycle_num - 1] = curr_num
curr_num += 1
for index in range(n - cycle_num - 2, cycle_num - 1, -1):
res[0 - cycle_num - 1][index] = curr_num
curr_num += 1
for index in range(n - cycle_num - 2, cycle_num, -1):
res[index][cycle_num] = curr_num
curr_num += 1
cycle_num += 1
return res