59. Spiral Matrix II
https://leetcode.com/problems/spiral-matrix-ii/
solution
循环不变量,矩阵四条边都使用同一种左闭右开或左闭右闭的形式。新建一个数组用于更新数据,不必in-place
以下采用了左闭右闭的形式
# value递进,坐标变换: https://algo.monster/liteproblems/59
class Solution:
def generateMatrix(self, n: int) -> List[List[int]]:
row_start, row_end = 0, n - 1
col_start, col_end = 0, n - 1
num = 1
res = [[0 for _ in range(n)] for _ in range(n)]
while row_end >= row_start and col_end >= col_start:
for i in range(col_start, col_end + 1):
res[row_start][i] = num
num += 1
row_start += 1
for i in range(row_start, row_end + 1):
res[i][col_end] = num
num += 1
col_end -= 1
for i in range(col_end, col_start - 1, -1):
res[row_end][i] = num
num += 1
row_end -= 1
for i in range(row_end, row_start - 1, -1):
res[i][col_start] = num
num += 1
col_start += 1
return res时间复杂度:O(n^2) 空间复杂度:O(1)
follow up
时间复杂度:O() 空间复杂度:O()
行先倒过来,两两替换元素。注意控制index避免重复
时间复杂度:O(n^2) 空间复杂度:O(1)
模拟,每次到首或尾就转换方向,模拟题需要耐心的想一想
时间复杂度:O() 空间复杂度:O()
根据同一level, 行加列的index和相同
Last updated