59. Spiral Matrix II

Array操作,问题核心应该是赋值loop的方向切换,我思路是维护四个数值来确定边界,到边界就转向。

class Solution:
    def generateMatrix(self, n: int) -> List[List[int]]:
        res = [[0 for _ in range(n)] for _ in range(n)]
        val = 1
        l, r, u, d = 0, n-1, 0, n-1
        while True:
            for col in range(l, r+1):
                res[u][col] = val
                val += 1
            u += 1
            if u > d: break
            
            for row in range(u, d+1):
                res[row][r] = val
                val += 1
            r -= 1
            if r < l: break
            
            for col in range(r, l-1, -1):
                res[d][col] = val
                val += 1
            d -= 1
            if d < u: break
                
            for row in range(d, u-1, -1):
                res[row][l] = val
                val += 1
            l += 1
            if l > r: break
        
        return res

Last updated

Was this helpful?