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.
原题链接:https://leetcode.com/problems/island-perimeter/#/description
大意:给定一个二维数组,数字"1"代表岛屿,“0”代表湖水,求岛屿的周长(下图中黄色边的个数)
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:
先计算1(岛屿)的数量,然后依次往右下遍历(这样不重复),计算相邻的格子的数量,每出现一次相邻,去掉2个边
(一个单独的岛屿占四个边,但:若出现相邻岛屿之后就要去掉重合的两个边)
public class Solution { public int islandPerimeter(int[][] grid) { int count = 0;//记录1的数量 for (int[] i : grid) { for (int j = 0; j != i.length; j++) count += i[j]; } return 4*count-2*search(grid); } public int search(int[][] grid) { int row = grid.length; int col = grid[0].length; int calculator = 0; for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { if (grid[i][j] == 1) { if (i < row - 1 && grid[i + 1][j] == 1) { //往下 calculator++; } if (j < col - 1 && grid[i][j + 1] == 1) { //往右 calculator++; } } } } return calculator; } }
本文提供了一种解决LeetCode上岛屿周长问题的方法,通过遍历二维数组计算岛屿的周长。介绍了一个高效的算法实现,包括计算岛屿数量及调整周长计算的方式。

391

被折叠的 条评论
为什么被折叠?



