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区间为空,必须初始化一个空列表才能保证算法继续,否则死循环。