Number of Islands
Um mapa chega como uma lista de linhas de mesmo comprimento. Cada caractere é 1, um quadrado de terra, ou 0, um quadrado de água. Dois quadrados de terra pertencem à mesma ilha quando um está diretamente acima, abaixo, à esquerda ou à direita do outro. Quadrados que apenas se tocam em um canto não estão conectados.
Considere o mapa ["11000", "11000", "00100", "00011"]:
- os quatro quadrados de terra no canto superior esquerdo formam uma ilha,
- o único quadrado na linha do meio é uma segunda ilha, pois só toca a primeira em um canto,
- os dois quadrados no canto inferior direito formam uma terceira.
Então, o mapa contém 3 ilhas.
O mapa é, na verdade, um grafo: cada quadrado de terra é um nó, e uma aresta conecta dois quadrados de terra que compartilham um lado. Contar ilhas significa contar as partes conectadas desse grafo. Sempre que você encontra um quadrado de terra que ainda não visitou, encontrou uma nova ilha e explora toda ela antes de continuar.
Escreva uma função chamada numIslands que recebe grid, uma lista de strings compostas por 1 (terra) e 0 (água), e retorna o número de ilhas. Uma ilha é um grupo de quadrados de terra conectados para cima, para baixo, à esquerda ou à direita.
Por exemplo, ["01110", "01000", "00011", "11001"] retorna 3: a forma nas linhas superiores, o grupo à direita e o par no canto inferior esquerdo.
Restrições: 1 <= número de linhas, número de colunas <= 150. Todas as linhas têm o mesmo comprimento.
Função
- arg1string-array
- Retornainteger
Exemplos
- Entrada
- arg1 = ["11000", "11000", "00100", "00011"]
- Saída
- 3
- Entrada
- arg1 = ["01110", "01000", "00011", "11001"]
- Saída
- 3
+13 testes ocultos ao enviar
Dicas
Abra uma de cada vez. Cada uma revela um pouco mais.
Percorra o mapa quadrado por quadrado. Ao chegar a um quadrado de terra que nenhuma ilha anterior reivindicou, quantas novas ilhas você acabou de encontrar?
Quando encontrar uma nova ilha, visite cada quadrado de terra conectado a ela e marque cada um como visitado, para que a varredura não conte a mesma ilha novamente.
Explore usando uma fila (em largura) ou uma pilha explícita (em profundidade) de quadrados que ainda precisam ser visitados. Uma busca recursiva pode esgotar a pilha de chamadas em um mapa que seja uma única ilha enorme, enquanto um loop usando sua própria fila ou pilha não pode.
Em breve, uma explicação completa deste problema.
Problemas parecidos
Problemas que usam as mesmas ideias. Resolver dois ou três é o que fixa um padrão.
Python
def numIslands(grid):
# Escreva o código aquiCaso 1
Caso 2
Entrada
arg1 = ["11000", "11000", "00100", "00011"]
Esperado
3