59. 螺旋矩阵 II

给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。

 

本题思路:先生成一个 n^2的矩阵,定义上下左右四个边界变量

1.本题最精妙的地方就是 边界的迭代刚好与矩阵中数字填入顺序相同  

  for  i in range(l,r+1):

  for i in range(t,b+1):

  for i in range(r,l-1,-1):

  for i in range(b,t-1,-1):

2.第二个学到的点就是 range(start,end,step)的用法,在start > end 时,即倒叙打印时,step 应该设为-1

  

 

 

假设 n =4 ,那么每次取值的数为:  4 3 3 2 2 1 1

class Solution:
    def generateMatrix(self, n: int) -> List[List[int]]:
        maxtrix = [[0 for _ in range(n)] for _ in range(n)]
        l ,r ,t, b = 0 , n-1 , 0 , n-1
        num,tar = 1,n ** 2
        while num <= tar:
            print('1',(l,r,t,b))
            for  i in range(l,r+1):
                maxtrix[t][i] = num
                num +=1
            t +=1
            print('2',(l,r,t,b))
            for i in range(t,b+1):
                maxtrix[i][b] = num
                num += 1
            r -= 1
            print('3',(l,r,t,b))

            for i in range(r,l-1,-1):
                maxtrix[b][i] = num
                num+=1
            b -=1
            print('4',(l,r,t,b))

            for i in range(b,t-1,-1):
                maxtrix[i][l] = num
                num+=1
            l +=1
            print('5',(l,r,t,b))

        return maxtrix
        

 

posted @ 2020-01-28 19:24  ChevisZhang  阅读(103)  评论(0编辑  收藏  举报