Menu
CoddyTech

Spiral Matrix

Otrzymujesz macierz liczb całkowitych z m wierszami i n kolumnami, podaną jako lista wierszy. Zwróć wszystkie jej wartości w kolejności spiralnej.

Zacznij w lewym górnym rogu i idź w prawo wzdłuż górnego wiersza, następnie w dół wzdłuż prawej kolumny, w lewo wzdłuż dolnego wiersza i w górę wzdłuż lewej kolumny. Kontynuuj ruch zgodnie z ruchem wskazówek zegara, zataczając coraz mniejsze kręgi, aż każda wartość zostanie odczytana dokładnie raz.

Funkcja

spiralOrder(matrix: integer-2d-array) → integer-array
matrixinteger-2d-array
siatka liczb całkowitych w postaci listy wierszy o jednakowej długości
Zwracainteger-array
każda wartość macierzy w kolejności zgodnej z ruchem wskazówek zegara, zaczynając od lewego górnego rogu

Ograniczenia

  • 1 ≤ m, n ≤ 80, gdzie m = matrix.length i n = matrix[i].length
  • Każdy wiersz ma tę samą długość n.
  • -100 ≤ matrix[i][j] ≤ 100

Przykłady

Wejście
matrix = [[1, 2, 3], [10, 11, 4], [9, 12, 5], [8, 7, 6]]
Wyjście
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
Wyjaśnienie
Wartości rosną wzdłuż spirali. Na zewnętrznym pierścieniu odczytujemy 1, 2, 3 wzdłuż górnej krawędzi, 4, 5, 6 w dół po prawej, 7, 8 z powrotem wzdłuż dolnej krawędzi, a 9, 10 w górę po lewej. Warstwa wewnętrzna to pojedyncza kolumna, którą odczytujemy raz od góry do dołu: 11, 12.

lock icon+15 ukrytych testów przy wysłaniu

challenge icon

Pytanie dodatkowe

Czy możesz zamiast tego zwrócić wartości w kierunku przeciwnym do ruchu wskazówek zegara, zaczynając od lewego górnego rogu i najpierw przechodząc w dół lewej kolumny?

Zresetuj kod
def spiralOrder(matrix):
    # Wpisz kod tutaj
Przypadki testowe

Przypadek 1

Przypadek 2

Przypadek 3

Wejście

matrix = [[1, 2, 3], [10, 11, 4], [9, 12, 5], [8, 7, 6]]

Oczekiwane

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]