Oferta de puntero de espada 29. Ideas para resolver problemas para imprimir matriz en el sentido de las agujas del reloj
1. Ideas
Nota : La matriz puede no ser una matriz N*N, por lo que es necesario considerar otras situaciones de matriz para hacer una clasificación en base a la ley del ciclo de la lista de matrices con filas y columnas iguales.
- lista vacía de matrices
[]
- lista de matrices con una sola fila
[[2,3]]
- lista de matrices con una sola columna
[[3],[2]]
- Lista de matrices con múltiples filas y columnas ( la fila es mayor que la columna, la fila es igual a la columna, la fila es más pequeña que la columna )
1、[[2,3,4],[5,6,7],[8,9,10],[11,12,13]]
2、[[1,2,3],[4,5,6],[7,8,9]]
3、[[1,2,3,4],[5,6,7,8],[9,10,11,12]]
Dos, el código
class Solution:
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
result = []
# 空矩阵列表
if matrix == []:
return []
# 只有一行的矩阵列表
if len(matrix) == 1:
for i in range(len(matrix[0])):
result.append(matrix[0][i])
return result
start_xlocation = 0
start_ylocation = 0
# 行长
rows= len(matrix)
# 列长
column = len(matrix[0])
length = rows * column
# 只有一列的矩阵列表
if column == 1:
for i in range(len(matrix)):
result.append(matrix[i][0])
return result
# 循环次数
loop = min(rows,column) // 2
offset = 1
# 回字循环
while(loop):
for j in range(start_ylocation,column-offset):
result.append(matrix[start_xlocation][j])
j += 1
for i in range(start_xlocation,rows-offset):
result.append(matrix[i][j])
i += 1
for l in range(j,start_ylocation,-1):
result.append(matrix[i][l])
for h in range(i,start_xlocation,-1):
result.append(matrix[h][start_ylocation])
start_xlocation += 1
start_ylocation += 1
offset += 1
loop -= 1
# 列的长度大于等于行
if column >= rows:
for k in range(length - len(result)):
result.append(matrix[start_xlocation][start_ylocation])
start_ylocation += 1
else:
# 行的长度大于列
for k in range(length - len(result)):
result.append(matrix[start_xlocation][start_ylocation])
start_xlocation += 1
return result