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

示例:

输入:

3

输出:

[  

 [ 1, 2, 3 ],  
 
 [ 8, 9, 4 ],  
 
 [ 7, 6, 5 ]  
 
]  

解答:

def generateMatrix(self, n, m = None ): # m行 n列
    #当然可以处理n=m的正方形矩阵的特殊情况了
    m = n if m is None else m
    res = [[0]*n for i in range(m)]
    value = 1
    startX = 0
    startY = 0
    endX = n-1 #下标
    endY = m-1 #下标
    while startX<=endX and startY<=endY :
        #如果只有一列
        if startX==endX :
            for i in range(startY,endY+1):
                res[i][endX] = value
                value+=1
            return res
        #如果只有一行
        if startY==endY :
            for i in range(startX,endX+1):
                res[endY][i] = value
                value+=1
            return res
        #遍历StartX->endX
        for i in range(startX,endX):
            res[startY][i] = value
            value += 1
        #遍历startY->endY
        for i in range(startY,endY):
            res[i][endX] = value
            value += 1
        #遍历endX->startX
        for i in range(startX+1,endX+1)[::-1]:
            res[endY][i]=value
            value+=1
        #遍历endY->startY
        for i in range(startY+1,endY+1)[::-1]:
            res[i][startX]=value
            value+=1
        startX+=1
        startY+=1
        endX-=1
        endY-=1
    return res