59.螺旋矩阵II medium

Posted on 2022-06-27 14:35  林安静  阅读(31)  评论(0)    收藏  举报

59.螺旋矩阵II

第一次自己一遍过做出了最优解,原理就是模拟填充的过程,先从左到右再上到下,右到左,下到上
唯一需要注意的是:

  1. 需要设定边界值,碰到边界值即停止的同时转向
  2. 我的方法会将坐标溢出一个位置,故在转向的时候会多加一行代码调整回来

    代码随想录的不同点(https://gitee.com/programmercarl/leetcode-master/blob/master/problems/0059.螺旋矩阵II.md):

我的代码:

vertical:横向的边界值,相当于横向填充的时候会遇到的墙壁
transverse:纵向的边界值,相当于纵向填充的时候会遇到的墙壁

class Solution:
    def generateMatrix(self, n: int) -> List[List[int]]:
        vertical = 0
        transverse = 0
        ctl = 0
        l = [[0 for i in range(n)] for j in range(n)]
        count = 0
        x = 0
        y = 0
        i = 1
        while i <= n ** 2:
            if ctl == 0:
                if count < n - vertical:
                    l[y][x] = i
                    x += 1
                else:
                    count = 0
                    x -= 1
                    y += 1
                    ctl = 1
                    transverse += 1
                    continue
            if ctl == 1:
                if count < n - transverse:
                    l[y][x] = i
                    y += 1
                else:
                    count = 0
                    x -= 1
                    y -= 1
                    ctl = 2
                    vertical += 1
                    continue
            if ctl == 2:
                if count < n - vertical:
                    l[y][x] = i
                    x -= 1
                else:
                    count = 0
                    x += 1
                    y -= 1
                    ctl = 3
                    transverse += 1
                    continue
            if ctl == 3:
                if count < n - transverse:
                    l[y][x] = i
                    y -= 1
                else:
                    count = 0
                    x += 1
                    y += 1
                    ctl = 0
                    vertical += 1
                    continue
            count += 1
            i += 1
        return l