Open snow-swallow opened 4 years ago
在 N N 的网格上,我们放置一些 1 1 * 1 的立方体。 每个值 v = grid[i][j] 表示 v 个正方体叠放在对应单元格 (i, j) 上。 请你返回最终形体的表面积。
这题最大的问题是理解题意= =|||, 看了好久才看出下面这个规律 v = grid[i][j] 要这样看
v = grid[i][j]
[ [ d[0][0], d[0][1], …, d[0][j], … ], [ d[1][0], d[1][1], …, d[1][j], … ], …, [ d[i][0], d[i][1], …, d[i][j], … ], … ]
回到解题思路:累加每个d[i][j] 的有效表面积
/** * @param {number[][]} grid * @return {number} */ var surfaceArea = function(grid) { let count = 0; function getReduceArea(grid, i, j) { count = 0; if (i < grid.length-1) { count += Math.min(grid[i][j], grid[i+1][j]); } if (i > 0) { count += Math.min(grid[i][j], grid[i-1][j]); } if (j < grid[i].length-1) { count += Math.min(grid[i][j], grid[i][j+1]); } if (j > 0) { count += Math.min(grid[i][j], grid[i][j-1]); } return count; } let area = 0; for (let i = 0; i < grid.length; i ++) { for (let j = 0; j < grid[i].length; j ++) { if (grid[i][j] > 0) { area += 4* grid[i][j] + 2 - getReduceArea(grid, i, j); } } } return area; };
示例 1: 输入:[[2]] 输出:10 示例 2: 输入:[[1,2],[3,4]] 输出:34 示例 3: 输入:[[1,0],[0,2]] 输出:16 示例 4: 输入:[[1,1,1],[1,0,1],[1,1,1]] 输出:32 示例 5: 输入:[[2,2,2],[2,1,2],[2,2,2]] 输出:46
https://leetcode-cn.com/problems/surface-area-of-3d-shapes/ https://leetcode-cn.com/problems/surface-area-of-3d-shapes/solution/shi-li-you-tu-you-zhen-xiang-jiang-jie-yi-kan-jiu-/
题目
思路
这题最大的问题是理解题意= =|||, 看了好久才看出下面这个规律
v = grid[i][j]
要这样看回到解题思路:累加每个d[i][j] 的有效表面积
代码
测试用例
Reference