mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-07 15:45:40 +08:00
Merge pull request #2698 from sxdtywm/patch-6
Update 0106.岛屿的周长.md for python go
This commit is contained in:
@ -216,8 +216,131 @@ public class Main {
|
|||||||
|
|
||||||
### Python
|
### Python
|
||||||
|
|
||||||
|
```python
|
||||||
|
|
||||||
|
def main():
|
||||||
|
import sys
|
||||||
|
input = sys.stdin.read
|
||||||
|
data = input().split()
|
||||||
|
|
||||||
|
# 读取 n 和 m
|
||||||
|
n = int(data[0])
|
||||||
|
m = int(data[1])
|
||||||
|
|
||||||
|
# 初始化 grid
|
||||||
|
grid = []
|
||||||
|
index = 2
|
||||||
|
for i in range(n):
|
||||||
|
grid.append([int(data[index + j]) for j in range(m)])
|
||||||
|
index += m
|
||||||
|
|
||||||
|
sum_land = 0 # 陆地数量
|
||||||
|
cover = 0 # 相邻数量
|
||||||
|
|
||||||
|
for i in range(n):
|
||||||
|
for j in range(m):
|
||||||
|
if grid[i][j] == 1:
|
||||||
|
sum_land += 1
|
||||||
|
# 统计上边相邻陆地
|
||||||
|
if i - 1 >= 0 and grid[i - 1][j] == 1:
|
||||||
|
cover += 1
|
||||||
|
# 统计左边相邻陆地
|
||||||
|
if j - 1 >= 0 and grid[i][j - 1] == 1:
|
||||||
|
cover += 1
|
||||||
|
# 不统计下边和右边,避免重复计算
|
||||||
|
|
||||||
|
result = sum_land * 4 - cover * 2
|
||||||
|
print(result)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
### Go
|
### Go
|
||||||
|
|
||||||
|
```go
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
scanner := bufio.NewScanner(os.Stdin)
|
||||||
|
scanner.Scan()
|
||||||
|
line := scanner.Text()
|
||||||
|
|
||||||
|
n, m := parseInput(line)
|
||||||
|
|
||||||
|
// 初始化 grid
|
||||||
|
grid := make([][]int, n)
|
||||||
|
for i := range grid {
|
||||||
|
grid[i] = make([]int, m)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 读入 grid 数据
|
||||||
|
for i := 0; i < n; i++ {
|
||||||
|
scanner.Scan()
|
||||||
|
line := scanner.Text()
|
||||||
|
values := parseLine(line, m)
|
||||||
|
for j := 0; j < m; j++ {
|
||||||
|
grid[i][j] = values[j]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sum := 0 // 陆地数量
|
||||||
|
cover := 0 // 相邻数量
|
||||||
|
|
||||||
|
for i := 0; i < n; i++ {
|
||||||
|
for j := 0; j < m; j++ {
|
||||||
|
if grid[i][j] == 1 {
|
||||||
|
sum++ // 统计总的陆地数量
|
||||||
|
|
||||||
|
// 统计上边相邻陆地
|
||||||
|
if i-1 >= 0 && grid[i-1][j] == 1 {
|
||||||
|
cover++
|
||||||
|
}
|
||||||
|
// 统计左边相邻陆地
|
||||||
|
if j-1 >= 0 && grid[i][j-1] == 1 {
|
||||||
|
cover++
|
||||||
|
}
|
||||||
|
// 为什么没统计下边和右边? 因为避免重复计算
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println(sum*4 - cover*2)
|
||||||
|
}
|
||||||
|
|
||||||
|
// parseInput 解析 n 和 m
|
||||||
|
func parseInput(line string) (int, int) {
|
||||||
|
parts := strings.Split(line, " ")
|
||||||
|
n, _ := strconv.Atoi(parts[0])
|
||||||
|
m, _ := strconv.Atoi(parts[1])
|
||||||
|
return n, m
|
||||||
|
}
|
||||||
|
|
||||||
|
// parseLine 解析一行中的多个值
|
||||||
|
func parseLine(line string, count int) []int {
|
||||||
|
parts := strings.Split(line, " ")
|
||||||
|
values := make([]int, count)
|
||||||
|
for i := 0; i < count; i++ {
|
||||||
|
values[i], _ = strconv.Atoi(parts[i])
|
||||||
|
}
|
||||||
|
return values
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
### Rust
|
### Rust
|
||||||
|
|
||||||
### Javascript
|
### Javascript
|
||||||
|
Reference in New Issue
Block a user