#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param n int整型 
# @return int整型二维数组
#
class Solution:
    def Matrix(self , n: int) -> List[List[int]]:
        # write code here
        l, r, u, d = 0, n-1, 0, n-1#边界:左,右,上,下
        k, step = 1, n*n#计数,总字符数
        matrix = [[0]*n for _ in range(n)]#初始矩阵
        while k<=step:
            for i in range(l,r+1):#沿上边界从左到右
                matrix[u][i] = k
                k += 1
            u += 1#上边界收缩(边界已填充)
            for i in range(u,d+1):#沿右边界从上到下
                matrix[i][r] = k
                k += 1
            r -= 1#右边界收缩(边界已填充)
            for i in range(r,l-1,-1):#沿下边界从右到左
                matrix[d][i] = k
                k += 1
            d -= 1#下边界收缩(边界已填充)
            for i in range(d,u-1,-1):#沿左边界从下到上
                matrix[i][l] = k
                k += 1
            l += 1#左边界收缩(边界已填充)
        return matrix#返回填充后的矩阵