mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-06 23:28:29 +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
|
||||
|
||||
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
|
||||
|
||||
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
|
||||
|
||||
### Javascript
|
||||
|
Reference in New Issue
Block a user