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

剑指offer 29: 顺时针打印矩阵

时间复杂度:O() 空间复杂度:O()

48. Rotate Image

  • 行先倒过来,两两替换元素。注意控制index避免重复

时间复杂度:O(n^2) 空间复杂度:O(1)

6. Zigzag Conversion

  • 模拟,每次到首或尾就转换方向,模拟题需要耐心的想一想

时间复杂度:O() 空间复杂度:O()

54. Spiral Matrix

498. Diagonal Traverse

  • 根据同一level, 行加列的index和相同

1424. Diagonal Traverse II

Last updated