import copy
class Solution:
def setZeroes(self, matrix: List[List[int]]) -> None:
"""
Do not return anything, modify matrix in-place instead.
"""
rows = []
cols = []
for i in range(len(matrix)):
for j in range(len(matrix[0])):
if matrix[i][j] == 0:
rows.append(i)
cols.append(j)
for row,col in zip(rows,cols):
matrix[row] = [0] * len(matrix[0])
for z in range(len(matrix)):
matrix[z][col] = 0
2 初始化: 矩阵 左、右、上、下 四个边界 l , r , t , b ,用于打印的结果列表 res 。
3 循环打印: "从左向右、从上向下、从右向左、从下向上" 四个方向循环打印。
根据边界打印,即将元素按顺序添加至列表 res 尾部。
边界向内收缩 1 (代表已被打印)。
判断边界是否相遇(是否打印完毕),若打印完毕则跳出。
4 返回值: 返回 res 即可。
class Solution:
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
if not matrix:return []
l,r,t,b,res = 0,len(matrix[0])-1,0,len(matrix)-1,[]
while True:
for i in range(l,r+1): res.append(matrix[t][i])
t+=1
if t>b:break
for i in range(t,b+1): res.append(matrix[i][r])
r-=1
if l>r:break
for i in range(r,l-1,-1): res.append(matrix[b][i])
b-=1
if t>b:break
for i in range(b,t-1,-1): res.append(matrix[i][l])
l+=1
if l>r:break
return res
在Python中,zip(*matrix) 是一种常用的操作,尤其在处理多维数组(如矩阵)时。这里的 matrix 假定是一个二维列表(即列表的列表),用于表示一个矩阵。星号(*)在函数调用中的作用是 unpacking(解包),它将矩阵的每一行作为单独的参数传递给 zip 函数。
zip 函数的基本功能是将多个可迭代对象(在这个上下文中是矩阵的行)对应位置的元素配对,形成一个元组的迭代器。当应用于二维列表(矩阵)时,zip(*matrix) 的效果是将矩阵的列转置。也就是说,它会把矩阵的每一列元素收集起来,形成新的元组,这些元组组成的迭代器实质上代表了原矩阵的转置。
class Solution:
def rotate(self, matrix: List[List[int]]) -> None:
"""
Do not return anything, modify matrix in-place instead.
"""
for i in range(len(matrix)):
for j in range(i, len(matrix[0])):
matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
for i in range(len(matrix)):
matrix[i] = matrix[i][::-1]