zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    MT【160】格点
    MT【159】单调有界有极限
    c_str() 函数
    C strstr() 函数
    全面总结:matlab怎么做漂亮的图
    程序员电邮札记
    C编译: 使用gdb调试
    C编译: 动态连接库 (.so文件)
    C编译: makefile基础
    数据科学
  • 原文地址:https://www.cnblogs.com/wudanyang/p/15543960.html
Copyright © 2011-2022 走看看