Skip to content

Commit d03a507

Browse files
authored
Update 0106.岛屿的周长.md for python go
Update 0106.岛屿的周长.md for python go
1 parent f16c640 commit d03a507

File tree

1 file changed

+123
-0
lines changed

1 file changed

+123
-0
lines changed

problems/kamacoder/0106.岛屿的周长.md

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,8 +216,131 @@ public class Main {
216216

217217
### Python
218218

219+
```python
220+
221+
def main():
222+
import sys
223+
input = sys.stdin.read
224+
data = input().split()
225+
226+
# 读取 n 和 m
227+
n = int(data[0])
228+
m = int(data[1])
229+
230+
# 初始化 grid
231+
grid = []
232+
index = 2
233+
for i in range(n):
234+
grid.append([int(data[index + j]) for j in range(m)])
235+
index += m
236+
237+
sum_land = 0 # 陆地数量
238+
cover = 0 # 相邻数量
239+
240+
for i in range(n):
241+
for j in range(m):
242+
if grid[i][j] == 1:
243+
sum_land += 1
244+
# 统计上边相邻陆地
245+
if i - 1 >= 0 and grid[i - 1][j] == 1:
246+
cover += 1
247+
# 统计左边相邻陆地
248+
if j - 1 >= 0 and grid[i][j - 1] == 1:
249+
cover += 1
250+
# 不统计下边和右边,避免重复计算
251+
252+
result = sum_land * 4 - cover * 2
253+
print(result)
254+
255+
if __name__ == "__main__":
256+
main()
257+
258+
259+
```
260+
219261
### Go
220262

263+
```go
264+
265+
package main
266+
267+
import (
268+
"bufio"
269+
"fmt"
270+
"os"
271+
"strconv"
272+
"strings"
273+
)
274+
275+
func main() {
276+
scanner := bufio.NewScanner(os.Stdin)
277+
scanner.Scan()
278+
line := scanner.Text()
279+
280+
n, m := parseInput(line)
281+
282+
// 初始化 grid
283+
grid := make([][]int, n)
284+
for i := range grid {
285+
grid[i] = make([]int, m)
286+
}
287+
288+
// 读入 grid 数据
289+
for i := 0; i < n; i++ {
290+
scanner.Scan()
291+
line := scanner.Text()
292+
values := parseLine(line, m)
293+
for j := 0; j < m; j++ {
294+
grid[i][j] = values[j]
295+
}
296+
}
297+
298+
sum := 0 // 陆地数量
299+
cover := 0 // 相邻数量
300+
301+
for i := 0; i < n; i++ {
302+
for j := 0; j < m; j++ {
303+
if grid[i][j] == 1 {
304+
sum++ // 统计总的陆地数量
305+
306+
// 统计上边相邻陆地
307+
if i-1 >= 0 && grid[i-1][j] == 1 {
308+
cover++
309+
}
310+
// 统计左边相邻陆地
311+
if j-1 >= 0 && grid[i][j-1] == 1 {
312+
cover++
313+
}
314+
// 为什么没统计下边和右边? 因为避免重复计算
315+
}
316+
}
317+
}
318+
319+
fmt.Println(sum*4 - cover*2)
320+
}
321+
322+
// parseInput 解析 n 和 m
323+
func parseInput(line string) (int, int) {
324+
parts := strings.Split(line, " ")
325+
n, _ := strconv.Atoi(parts[0])
326+
m, _ := strconv.Atoi(parts[1])
327+
return n, m
328+
}
329+
330+
// parseLine 解析一行中的多个值
331+
func parseLine(line string, count int) []int {
332+
parts := strings.Split(line, " ")
333+
values := make([]int, count)
334+
for i := 0; i < count; i++ {
335+
values[i], _ = strconv.Atoi(parts[i])
336+
}
337+
return values
338+
}
339+
340+
341+
```
342+
343+
221344
### Rust
222345

223346
### Javascript

0 commit comments

Comments
 (0)