龙熠的技术小站

Leetcode 463 Island Perimeter

找周长


题目

1
2
3
描述
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.
1
2
3
4
5
6
7
8
9
例子
[[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,上下左右都有1的情况下,周长是0,只有上下左右有一方不为1,则周长加1
(未优化,优化方案之一,应该是只判断左上,不判断右下,这样遍历时就不会多判断了)

解题

Language : swift

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Solution {
func islandPerimeter(_ grid: [[Int]]) -> Int {
var length = 0
for row in 0...grid.count-1 {
for col in 0...grid[row].count-1 {
let value = grid[row][col]
if (value == 1) {
if (col - 1 < 0 || grid[row][col - 1] == 0) {
length += 1
}
if (row - 1 < 0 || grid[row - 1][col] == 0) {
length += 1
}
if (col + 1 > grid[row].count - 1 || grid[row][col + 1] == 0) {
length += 1
}
if (row + 1 > grid.count - 1 || grid[row + 1][col] == 0) {
length += 1
}
}
}
}
return length
}
}
分享