Сложность: easy
Дан двумерный массив grid, где:
1 — суша
0 — вода
Нужно найти периметр острова (все стороны, соприкасающиеся с водой или краем карты).
Пример:
Input: grid = [[0,1,0,0],[1,1,1,0],[0,1,0,0],[1,1,0,0]]
Output: 16
👨💻 Алгоритм:
1⃣Пройти через каждую ячейку сетки и, когда вы находитесь в ячейке с значением 1 (ячейка суши), проверить окружающие (СВЕРХУ, СПРАВА, СНИЗУ, СЛЕВА) ячейки.
2⃣Ячейка суши без каких-либо окружающих ячеек суши будет иметь периметр 4. Вычесть 1 за каждую окружающую ячейку суши.
3⃣Когда вы находитесь в ячейке с значением 0 (ячейка воды), ничего не делать. Просто перейти к следующей ячейке.
😎 Решение:
class Solution {
public function islandPerimeter($grid) {
$rows = count($grid);
$cols = count($grid[0]);
$result = 0;
for ($r = 0; $r < $rows; $r++) {
for ($c = 0; $c < $cols; $c++) {
if ($grid[$r][$c] == 1) {
$up = ($r == 0) ? 0 : $grid[$r-1][$c];
$left = ($c == 0) ? 0 : $grid[$r][$c-1];
$down = ($r == $rows-1) ? 0 : $grid[$r+1][$c];
$right = ($c == $cols-1) ? 0 : $grid[$r][$c+1];
$result += 4 - ($up + $left + $right + $down);
}
}
}
return $result;
}
}Ставь 👍 и забирай 📚 Базу знаний
