倉鼠群的每周題目如下
屏幕快照 2018-08-29 上午9.04.55.png
先上代碼务冕,因?yàn)槟壳罢谟胹wift作主要語言開發(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.先計(jì)算每個(gè)網(wǎng)格摞起來的小立方體的表面積鞠眉,即grid[i][j]的總表面積澄峰。累加計(jì)算所有單個(gè)網(wǎng)格的總表面積嫉沽, 本人思路,每個(gè)立方體前后左右都有4個(gè)俏竞,再加上最底層和最頂層的,每個(gè)網(wǎng)格總共4v+2
2.再遍歷去重:判斷grid[i][j]和其相鄰的網(wǎng)格表面積绸硕,用總表面積減去這些重復(fù)計(jì)算的面積,即得到所求值