leetcode-463. 島嶼的周長
阿新 • • 發佈:2021-11-12
題目
解法
依題遍歷陸地的四個邊,如果靠近水,那麼算到周長裡面,否則不算
<?php class Solution { /** * @param Integer[][] $grid * @return Integer */ function islandPerimeter($grid) { if (empty($grid)) { return 0; } $per = 0; foreach ($grid as $rowKey => $rowGrid) { foreach ($rowGrid as $colKey => $colItem) { if ($colItem != 1) { continue; } $per += intval(!isset($grid[$rowKey - 1][$colKey]) || $grid[$rowKey - 1][$colKey] == 0); $per += intval(!isset($grid[$rowKey][$colKey + 1]) || $grid[$rowKey][$colKey + 1] == 0); $per += intval(!isset($grid[$rowKey + 1][$colKey]) || $grid[$rowKey + 1][$colKey] == 0); $per += intval(!isset($grid[$rowKey][$colKey - 1]) || $grid[$rowKey][$colKey - 1] == 0); } } return $per; } }
還有一種深度遍歷的方式
class Solution { /** * @param Integer[][] $grid * @return Integer */ function islandPerimeter($grid) { if (empty($grid)) { return 0; } $per = 0; foreach ($grid as $rowKey => $rowGrid) { foreach ($rowGrid as $colKey => $colItem) { if ($grid[$rowKey][$colKey] == 1) { $per += $this->dfs($grid, $rowKey, $colKey); } } } return $per; } public function dfs(&$grid, $rowKey, $colKey) { if (!isset($grid[$rowKey][$colKey])) { return 0; } if ($grid[$rowKey][$colKey] == 0) { return 0; } if ($grid[$rowKey][$colKey] == 2) { return 0; } $grid[$rowKey][$colKey] = 2; $per = 0; $per += intval(!isset($grid[$rowKey - 1][$colKey]) || $grid[$rowKey - 1][$colKey] == 0); $per += intval(!isset($grid[$rowKey][$colKey + 1]) || $grid[$rowKey][$colKey + 1] == 0); $per += intval(!isset($grid[$rowKey + 1][$colKey]) || $grid[$rowKey + 1][$colKey] == 0); $per += intval(!isset($grid[$rowKey][$colKey - 1]) || $grid[$rowKey][$colKey - 1] == 0); $per += $this->dfs($grid, $rowKey - 1, $colKey); $per += $this->dfs($grid, $rowKey, $colKey + 1); $per += $this->dfs($grid, $rowKey + 1, $colKey); $per += $this->dfs($grid, $rowKey, $colKey - 1); return $per; } }
本文來自部落格園,作者:吳丹陽-cn,轉載請註明原文連結:https://www.cnblogs.com/wudanyang/p/15543960.html