59. 螺旋矩阵 II

https://leetcode-cn.com/problems/spiral-matrix-ii/

解法一:

参考54.螺旋矩阵 的解法:

||  =>  |9|  =>  |8|      |6 7|      |4 5|      |1 2 3|
                 |9|  =>  |9 8|  =>  |9 6|  =>  |8 9 4|
                                     |8 7|      |7 6 5|

每次右旋,然后在头上加一行

py2的代码: 右旋用zip翻转加列逆序实现

def generateMatrix(self, n):
    A, lo = [], n*n+1
    while lo > 1:
        lo, hi = lo - len(A), lo
        A = [range(lo, hi)] + zip(*A[::-1])  #翻转,前面加一行
    return A

py3中需要修改,因为range或zip产生的是生成器,需要转为列表

class Solution:
    def generateMatrix(self, n: int) -> List[List[int]]:
        res = []
        lo = n ** 2 + 1
        while lo > 1:
            hi, lo = lo, lo - len(res)
            #翻转,前面加一行
            res = [list(range(lo, hi))] + list(zip(*res[::-1]))
        return res

为何list(range(lo, hi))建立列表还要加[]?因为第一次循环时range区间为空,必须初始化一个空列表才能保证算法继续,否则死循环。

最后更新于