leetcode59

 1 class Solution:
 2     def generateMatrix(self, n: int) -> 'List[List[int]]':
 3         res = [[0 for _ in range(n)]for _ in range(n)]
 4         x,y = 0,0
 5         count = 1
 6         while x <= n and y <= n:
 7             for j in range(y,n):
 8                 res[x][j] = count
 9                 count += 1
10             for i in range(x + 1,n):
11                 res[i][n - 1] = count
12                 count += 1
13             for j in range(n - 2,y - 1,-1):
14                 res[n - 1][j] = count
15                 count += 1
16             for i in range(n - 2,x,-1):
17                 res[i][y] = count
18                 count += 1
19             
20             x += 1
21             y += 1
22             n -= 1
23         return res

本题思路同leetcode54一样,二维数组螺旋遍历。

起点坐标:沿主对角线,从左上向右下移动,即 x += 1, y += 1

终点坐标:每次缩小n的范围,即 n -= 1

能完整访问一个"外圈",就可以按照相同的方式,访问"内圈",一层一层的访问。

原文地址:https://www.cnblogs.com/asenyang/p/12014822.html