12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- from typing import List
- # def generateMatrix(n: int) -> List[List[int]]:
- # 法一
- # l, r, t, b = 0, n - 1, 0, n - 1
- # res = [[0 for _ in range(n)] for _ in range(n)]
- # num, tar = 1, n * n
- # while num <= tar:
- # for i in range(l, r + 1): # left to right
- # res[t][i] = num
- # num += 1
- # t += 1
- # for i in range(t, b + 1): # top to bottom
- # res[i][r] = num
- # num += 1
- # r -= 1
- # for i in range(r, l - 1, -1): # right to left
- # res[b][i] = num
- # num += 1
- # b -= 1
- # for i in range(b, t - 1, -1): # bottom to top
- # res[i][l] = num
- # num += 1
- # l += 1
- # return res
- # 法二
- class Solution:
- def generateMatrix(self, n: int) -> List[List[int]]:
- tar = n * n
- visit = set()
- x, y = 0, -1
- dx, dy = 0, 1
- res = [[0 for _ in range(n)] for _ in range(n)]
- for num in range(tar):
- x, y = x + dx, y + dy
- visit.add((x, y))
- res[x][y] = num + 1
- dx, dy = self.coor((x, y), (dx, dy), visit, n)
- return res
- def coor(self, coord, direct, visit, n):
- x, y = coord
- dx, dy = direct
- if dx == 0 and dy == 1:
- if y == n - 1 or (x, y + 1) in visit:
- return (1, 0)
- if dx == 1 and dy == 0:
- if x == n - 1 or (x + 1, y) in visit:
- return (0, -1)
- if dx == 0 and dy == -1:
- if y == 0 or (x, y - 1) in visit:
- return (-1, 0)
- if dx == -1 and dy == 0:
- if (x - 1, y) in visit:
- return (0, 1)
- return (dx, dy)
|