Number of Islands
Eine Karte kommt als Liste gleich langer Zeilen. Jedes Zeichen ist entweder 1, ein Feld Land, oder 0, ein Feld Wasser. Zwei Landfelder gehören zur selben Insel, wenn eines direkt oberhalb, unterhalb, links oder rechts vom anderen liegt. Felder, die sich nur an einer Ecke berühren, sind nicht verbunden.
Betrachte die Karte ["11000", "11000", "00100", "00011"]:
- Die vier Landfelder in der oberen linken Ecke bilden eine Insel,
- das einzelne Feld in der mittleren Zeile ist eine zweite Insel, da es die erste nur an einer Ecke berührt,
- die beiden Felder unten rechts bilden eine dritte.
Die Karte enthält also 3 Inseln.
Die Karte ist eigentlich ein Graph: Jedes Landfeld ist ein Knoten, und eine Kante verbindet zwei Landfelder, die eine Seite gemeinsam haben. Inseln zu zählen bedeutet, die zusammenhängenden Komponenten dieses Graphen zu zählen. Jedes Mal, wenn du ein Landfeld findest, das du noch nicht besucht hast, hast du eine neue Insel gefunden, und du erkundest sie vollständig, bevor du weitermachst.
Schreibe eine Funktion namens numIslands, die grid erhält, eine Liste von Zeichenketten aus 1 (Land) und 0 (Wasser), und die Anzahl der Inseln zurückgibt. Eine Insel ist eine Gruppe von Landfeldern, die nach oben, unten, links oder rechts miteinander verbunden sind.
Zum Beispiel gibt ["01110", "01000", "00011", "11001"] den Wert 3 zurück: die Form in den oberen Zeilen, die Gruppe rechts und das Paar in der unteren linken Ecke.
Einschränkungen: 1 <= Anzahl der Zeilen, Anzahl der Spalten <= 150. Alle Zeilen haben dieselbe Länge.
Funktion
- arg1string-array
- Gibt zurückinteger
Beispiele
- Eingabe
- arg1 = ["11000", "11000", "00100", "00011"]
- Ausgabe
- 3
- Eingabe
- arg1 = ["01110", "01000", "00011", "11001"]
- Ausgabe
- 3
+13 versteckte Tests beim Einreichen
Tipps
Öffne sie nacheinander. Jeder verrät ein bisschen mehr.
Durchsuche die Karte Feld für Feld. Wenn du ein Landfeld erreichst, das noch keine zuvor gefundene Insel beansprucht hat, wie viele neue Inseln hast du gerade entdeckt?
Sobald du eine neue Insel findest, besuche jedes damit verbundene Landfeld und markiere es als gesehen, damit der Scan dieselbe Insel nicht erneut zählt.
Erkunde die noch zu besuchenden Felder mit einer Warteschlange (Breitensuche) oder einem expliziten Stapel (Tiefensuche). Eine rekursive Suche kann bei einer Karte, die aus einer einzigen riesigen Insel besteht, den Aufrufstapel erschöpfen, während eine Schleife über deine eigene Warteschlange oder deinen eigenen Stapel das nicht kann.
Eine vollständige Lösungserklärung zu dieser Aufgabe folgt bald.
Ähnliche Aufgaben
Aufgaben mit denselben Ideen. Wer zwei oder drei davon löst, behält das Muster.
Python
def numIslands(grid):
# Schreibe hier den CodeFall 1
Fall 2
Eingabe
arg1 = ["11000", "11000", "00100", "00011"]
Erwartet
3