• leetcode463. 岛屿的周长 吴丹阳


    题目

    463. 岛屿的周长

    解法

    依题遍历陆地的四个边,如果靠近水,那么算到周长里面,否则不算

    <?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

  • 相关阅读:
    资料存储
    Django学习
    爬虫学习
    time()模块
    一些功能性小程序段
    装饰器
    函数的知识点(理解难点剖析)
    linux中的回收站机制,防止rm -rf 事件
    python--列表解析式 -- 知识整理
    python- 时间模块 datatime 知识整理
  • 原文地址:https://www.cnblogs.com/wudanyang/p/15543960.html
Copyright © 2020-2023  润新知