倉鼠群的每周題目如下

屏幕快照 2018-08-29 上午9.04.55.png
先上代碼,因為目前正在用swift作主要語言開發(fā),所以用swift來解答
//swift版本
class Solution {
func surfaceArea(_ grid: [[Int]]) -> Int {
var res: Int = 0
for i in 0..<grid.count {
for v in grid[i] {
if v == 0 {
continue
}
res += (4*v + 2)
}
}
//去重
for i in 0..<grid.count {
for j in 0..<grid[i].count {
if (i == grid.count - 1) {
if j == (grid[i].count - 1) {
continue
}
res -= min(grid[i][j], grid[i][j+1]) * 2
}
else {
if j == (grid[i].count - 1) {
res -= min(grid[i][j], grid[i+1][j]) * 2
continue
}
res -= min(grid[i][j], grid[i][j+1]) * 2
res -= min(grid[i][j], grid[i+1][j]) * 2
}
}
}
return res
}
}
思路大致如下,

屏幕快照 2018-08-29 上午9.14.10.png
1.先計算每個網(wǎng)格摞起來的小立方體的表面積,即grid[i][j]的總表面積。累加計算所有單個網(wǎng)格的總表面積, 本人思路,每個立方體前后左右都有4個,再加上最底層和最頂層的,每個網(wǎng)格總共4v+2
2.再遍歷去重:判斷grid[i][j]和其相鄰的網(wǎng)格表面積,用總表面積減去這些重復(fù)計算的面積,即得到所求值