Resolução de problemas | #Número de ilhas#
link do tópico
Descrição do tópico
Limite de tempo: 1 segundo Limite de espaço: 256M
descrever
Dada uma matriz 01, 1 representa terra, 0 representa oceano, se dois 1s são adjacentes, então os dois 1s pertencem à mesma ilha. Consideramos apenas cima, baixo, esquerda e direita como adjacentes.
Ilha: Terra adjacente pode formar uma ilha (adjacente: cima, baixo, esquerda e direita) Determine o número de ilhas.
Por exemplo:
entrar
[
[1,1,0,0,0],
[0,1,0,1,1],
[0,0,0,1,1],
[0,0,0,0,0],
[ 0,0,1,1,1]
]
A saída correspondente é
3
Exemplo 1
entrar:
[[1,1,0,0,0],[0,1,0,1,1],[0,0,0,1,1],[0,0,0,0,0],[0,0,1,1,1]]
valor de retorno:
3
Exemplo 2
entrar:
[[0]]
valor de retorno:
0
Exemplo 3
entrar:
[[1,1],[1,1]]
valor de retorno:
1
Observação:
01 Faixa de matriz <=200*200
Ideias para resolver problemas
Um método de tingimento muito típico, execute dfs em cada ponto, tinga totalmente os pontos adjacentes com um valor de 1 e use soma para registrar o valor de tingimento atual.
Resumindo, a primeira ilha é totalmente corada como -1, a segunda ilha é totalmente corada como -2 e, finalmente, o inverso do maior número negativo é a resposta correta.
Usar um dfs fará o truque.
código de resolução de problemas
/**
* 判断岛屿数量
* @param grid string字符串型二维数组
* @return int整型
*/
function solve(grid) {
// write code here
// grid = [[1, 1, 0, 0, 0], [0, 1, 0, 1, 1], [0, 0, 0, 1, 1], [0, 0, 0, 0, 0], [0, 0, 1, 1, 1]];
let col = grid.length;
let row = grid[0].length;
let sum = 0;
let dfs = (x, y) => {
if (grid[x][y] == 1) {
grid[x][y] = sum;
}
let tox = x + 1;
let toy = y;
if (tox >= 0 && tox < col && toy >= 0 && toy < row && grid[tox][toy] == 1) {
dfs(tox, toy);
}
tox = x - 1;
toy = y;
if (tox >= 0 && tox < col && toy >= 0 && toy < row && grid[tox][toy] == 1) {
dfs(tox, toy);
}
tox = x;
toy = y + 1;
if (tox >= 0 && tox < col && toy >= 0 && toy < row && grid[tox][toy] == 1) {
dfs(tox, toy);
}
tox = x;
toy = y - 1;
if (tox >= 0 && tox < col && toy >= 0 && toy < row && grid[tox][toy] == 1) {
dfs(tox, toy);
}
return;
}
for (let i = 0; i < col; i++) {
for (let j = 0; j < row; j++) {
if (grid[i][j] == 1) {
sum--;
dfs(i, j);
}
}
}
sum = sum < 0 ? -sum : sum;
return sum;
}