leetcode 463
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 463相关的知识,希望对你有一定的参考价值。
题目描述:
You are given a map in form of a two-dimensional integer grid where 1 represents land and 0 represents water. Grid cells are connected horizontally/vertically (not diagonally). The grid is completely surrounded by water, and there is exactly one island (i.e., one or more connected land cells). The island doesn‘t have "lakes" (water inside that isn‘t connected to the water around the island). One cell is a square with side length 1. The grid is rectangular, width and height don‘t exceed 100. Determine the perimeter of the island.
Example:
[[0,1,0,0], [1,1,1,0], [0,1,0,0], [1,1,0,0]] Answer: 16 Explanation: The perimeter is the 16 yellow stripes in the image below:
解题思路分析:
就是逐一遍历所有的cell,用分离的cell总的的边数减去重叠的边的数目即可。在查找重叠的边的数目的时候有一点小技巧,就是沿着其中两个方向就好,这种题目都有类似的规律,就是可以沿着上三角或者下三角形的方向来做。
一点感受:
题目非常简单,可是我为什么我还要把这个题目放到博客上呢?原因在于这是我第一次尝试直接在白板leetcode的白板上写代码,而且一次通过,算是开了个好头吧,以后不管是简单题还是难题,我都会写博客,以后面试的时候一定会用到。
如果编程语言用的比较熟,白板写代码的效果和IDE上写没太大区别。
class Solution { public: int islandPerimeter(vector<vector<int>>& grid) { int res = 0, overlap = 0; for (int i = 0; i < grid.size(); i ++) { for (int j = 0; j < grid[i].size(); j ++) { if (grid[i][j] == 1) { res ++; if (j + 1 < grid[i].size() && grid[i][j + 1] == 1) overlap ++; if (i + 1 < grid.size() && grid[i + 1][j] == 1) overlap ++; } } } return res * 4 - 2 * overlap; } };
ps:代码风格可能还有点问题,接下来会好好改进的,毕竟程序员(工程师)是一种严谨的职业!
以上是关于leetcode 463的主要内容,如果未能解决你的问题,请参考以下文章
[leetcode-463-Island Perimeter]
[LeetCode] 463 Island Perimeter