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

  • 相关阅读:
    轮子来袭 vJine.Core Orm 之 03_架构分析
    轮子来袭 vJine.Core 之 AppConfig<T>
    C# 数据类型映射 (SQLite,MySQL,MSSQL,Oracle)
    炫酷 2048 完全免费 色彩无线 流畅如飞
    DebugLog 打印方法执行时间
    [转] charles使用教程指南
    Macbook Pro配置PHP开发环境
    基于ubuntu 14搭建nginx+php+mysql环境
    Android Studio -修改LogCat的颜色
    [转]
  • 原文地址:https://www.cnblogs.com/wudanyang/p/15543960.html
Copyright © 2011-2022 走看看