Number of Islands
Un mapa llega como una lista de filas de igual longitud. Cada carácter es 1, un cuadrado de tierra, o 0, un cuadrado de agua. Dos cuadrados de tierra pertenecen a la misma isla cuando uno está directamente encima, debajo, a la izquierda o a la derecha del otro. Los cuadrados que solo se tocan en una esquina no están conectados.
Considera el mapa ["11000", "11000", "00100", "00011"]:
- los cuatro cuadrados de tierra de la esquina superior izquierda forman una isla,
- el cuadrado único de la fila del medio es una segunda isla, ya que solo toca la primera en una esquina,
- los dos cuadrados de la esquina inferior derecha forman una tercera.
Así que el mapa contiene 3 islas.
El mapa es en realidad un grafo: cada cuadrado de tierra es un nodo, y una arista une dos cuadrados de tierra que comparten un lado. Contar las islas significa contar las componentes conexas de ese grafo. Cada vez que encuentras un cuadrado de tierra que aún no has visitado, has encontrado una nueva isla y exploras toda ella antes de continuar.
Escribe una función llamada numIslands que reciba grid, una lista de cadenas formadas por 1 (tierra) y 0 (agua), y devuelva el número de islas. Una isla es un grupo de casillas de tierra conectadas hacia arriba, abajo, la izquierda o la derecha.
Por ejemplo, ["01110", "01000", "00011", "11001"] devuelve 3: la forma de las filas superiores, el grupo de la derecha y el par de la esquina inferior izquierda.
Restricciones: 1 <= número de filas, número de columnas <= 150. Todas las filas tienen la misma longitud.
Función
- arg1string-array
- Devuelveinteger
Ejemplos
- Entrada
- arg1 = ["11000", "11000", "00100", "00011"]
- Salida
- 3
- Entrada
- arg1 = ["01110", "01000", "00011", "11001"]
- Salida
- 3
+13 pruebas ocultas al enviar
Pistas
Ábrelas de una en una. Cada una revela un poco más.
Escanea el mapa casilla por casilla. Cuando llegues a una casilla de tierra que ninguna isla anterior haya reclamado, ¿cuántas islas nuevas acabas de encontrar?
Cuando encuentres una isla nueva, visita cada casilla de tierra conectada a ella y marca cada una como vista, para que el recorrido no cuente la misma isla otra vez.
Explora con una cola (primero en anchura) o una pila explícita (primero en profundidad) de casillas que aún tienes que visitar. Una búsqueda recursiva puede agotar la pila de llamadas en un mapa que sea una única isla enorme, mientras que un bucle sobre tu propia cola o pila no puede hacerlo.
Pronto habrá una explicación completa de este problema.
Problemas similares
Problemas que usan las mismas ideas. Resolver dos o tres es lo que fija un patrón.
Python
def numIslands(grid):
# Escribe el código aquíCaso 1
Caso 2
Entrada
arg1 = ["11000", "11000", "00100", "00011"]
Esperado
3