【LeetCode】Island Perimeter 解题报告
2017-01-06 16:30
288 查看
【LeetCode】Island Perimeter 解题报告
[LeetCode]https://leetcode.com/problems/island-perimeter/
Total Accepted: 16143
Total Submissions: 28552
Difficulty: Easy
Question
You are given a map in form of a two-dimensional integer grid where 1represents 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:
![](https://leetcode.com/static/images/problemset/island.png)
Ways
有点类似小学火柴棍的问题。我最初的想法是统计一的个数,找规律,试验了几次之后发现貌似是1的个数*2+2,但是这个是错误的。比如最角落的1如果被周围的1所包围的话,实际上是不贡献边的。后来想到,应该把边角的被包围的1去掉,中间的被四个1包围的1也给去掉,剩余的1的个数*4.这样很麻烦,因为判断处于边角位置的1就要写4个If,判断被包围的1也要判断四次。
看到top的答案我才明白,可以统计1的个数*4 再减去 与其有交集的1的个数*2.为了防止减去的边不被重复计算,所以,只判断右边和下边的1.代码如下。
public class Solution { public int islandPerimeter(int[][] grid) { int count=0; int neighbours=0; for(int i=0; i<grid.length; i++){ for(int j=0 ;j<grid[i].length; j++){ if(grid[i][j]==1){ count++;// count islands if(j<grid[i].length-1 && grid[i][j+1]==1) neighbours++;// count right neighbours if(i<grid.length-1 && grid[i+1][j]==1) neighbours++;// count down neighbours } } } return 4*count-2*neighbours; } }
果然这种方法判断的次数要少一点。
Date
2017 年 1 月 6 日相关文章推荐
- 【LeetCode】226. Invert Binary Tree 解题报告
- leetcode解题报告(5):Longest Consecutive Sequence
- 【LeetCode】103. Binary Tree Zigzag Level Order Traversal(Medium)解题报告
- Leetcode 81. Search in Rotated Sorted Array II 旋转数组查询2 解题报告
- [Leetcode] 105. Construct Binary Tree from Preorder and Inorder Traversal 解题报告
- Leetcode 412. Fizz Buzz 数字生成 解题报告
- [LeetCode]Product of Array Except Self,解题报告
- leetCode解题报告5道题(七)
- 【LeetCode】101. Symmetric Tree 解题报告
- 【LeetCode】653. Two Sum IV - Input is a BST 解题报告
- [leetcode] 320. Generalized Abbreviation 解题报告
- 【LeetCode】107.Binary Tree Level Order Traversal II(Easy)解题报告
- [Leetcode] 109. Convert Sorted List to Binary Search Tree 解题报告
- [Leetcode] 187. Repeated DNA Sequences 解题报告
- Letter Combinations of a Phone Number --leetcode解题报告
- [Leetcode] 198. House Robber 解题报告
- 【LeetCode】199.Binary Tree Right Side View(Medium)解题报告
- LeetCode(33) Search in Rotated Sorted Array解题报告
- 【LeetCode】404.Sum of Left Leaves(Easy)解题报告
- [Leetcode] 643. Maximum Average Subarray I 解题报告