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

  • 相关阅读:
    framework7学习笔记
    浮出层的css写法,完美兼容IE6~10
    SpringBoot2.x的c3p0- 0.9.1.2.jar:0.9.1.2]错误
    值溢出
    Jquery+AJAX实现滚动条下拉分页
    springboot+Mybatis多个数据源连接
    mysql批量替换字段中的字符或者字符串
    了解SpringCloud
    SpringBoot2.x访问不了application.properties文件中servlet.context-path上下文路径
    使用mavens创建SpringBoot和Mybatis的web项目
  • 原文地址:https://www.cnblogs.com/wudanyang/p/15543960.html
Copyright © 2011-2022 走看看