Oferta de puntero de espada 29. Ideas para resolver problemas para imprimir matriz en el sentido de las agujas del reloj

Oferta de puntero de espada 29. Ideas para resolver problemas para imprimir matriz en el sentido de las agujas del reloj

inserte la descripción de la imagen aquí

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

Supongo que te gusta

Origin blog.csdn.net/rothschild666/article/details/129404802
Recomendado
Clasificación