在 N * N
的网格上,我们放置一些 1 * 1 * 1
的立方体。
每个值 v = grid[i][j]
表示 v
个正方体叠放在对应单元格 (i, j)
上。
请你返回最终形体的表面积。
示例 1:
示例 2:
示例 3:
示例 4:
1 2
| 输入:[[1,1,1],[1,0,1],[1,1,1]] 输出:32
|
示例 5:
1 2
| 输入:[[2,2,2],[2,1,2],[2,2,2]] 输出:46
|
提示:
1 <= N <= 50
0 <= grid[i][j] <= 50
个人解答
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
var surfaceArea = function(grid) { var res = 0; var rows = grid.length; var cols = grid[0].length; for (var i = 0; i < rows; i++) { for (var j = 0; j < cols; j++) { var n = grid[i][j]; if (n > 0) { res += 6 * n - 2 * (n - 1);
res -= Math.min((i - 1 >= 0 ? ~~grid[i-1][j] : 0), n); res -= Math.min((i + 1 < rows ? ~~grid[i+1][j] : 0), n); res -= Math.min((j - 1 >= 0 ? ~~grid[i][j-1] : 0), n); res -= Math.min((j + 1 < cols ? ~~grid[i][j+1] : 0), n); } } }
return res; };
|
执行结果
执行用时: 60 ms, 在所有 JavaScript 提交中击败了 94.87% 的用户;
内存消耗: 35.3 MB, 在所有 JavaScript 提交中击败了 56.67% 的用户。