题目:
给你一个 n * n 的网格 grid ,上面放置着一些 1 x 1 x 1 的正方体。每个值 v = grid[i][j] 表示 v 个正方体叠放在对应单元格 (i, j) 上。
放置好正方体后,任何直接相邻的正方体都会互相粘在一起,形成一些不规则的三维形体。
请你返回最终这些形体的总表面积。
注意: 每个形体的底面也需要计入表面积中。
算法:
func surfaceArea(grid [][]int) int {
ans := 0
n := len(grid)
// 正面 + 底面
for i := 0; i < n; i = i + 1 {
for j := 0; j < n; j = j + 1 {
if grid[i][j] != 0 {
ans = ans + 2
}
if i == 0 {
ans = ans + grid[i][j]
}
if i == n - 1 {
ans = ans + grid[i][j]
}
if j == 0 {
ans = ans + grid[i][j]
}
if j == n - 1 {
ans = ans + grid[i][j]
}
if j + 1 < n {
ans = ans + abs(grid[i][j], grid[i][j + 1])
}
if i + 1 < n {
ans = ans + abs(grid[i][j], grid[i + 1][j])
}
}
}
return ans
}
func abs(a, b int) int{
if a > b {
return a - b
}
return b - a
}