题目描述:
在 N * N 的网格上,我们放置一些 1 * 1 * 1 的立方体。
每个值 v = grid[i][j] 表示 v 个正方体叠放在对应单元格 (i, j) 上。
请你返回最终形体的表面积。
示例 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
解题思路:
每一块每一块的面积去研究:
1、每一块面积=6*立方体个数-2*(立方体个数-1);
2、如果与周围有相交则减去相交面积;
实现代码:
int surfaceArea(int** grid, int gridSize, int* gridColSize){
int result=0;
int temp;
for(int row = 0;row < gridSize;row++) {
for(int col = 0;col < *gridColSize;col++) {
if(grid[row][col] != 0) {
result += 6 * grid[row][col] - (grid[row][col] - 1) * 2;
if(row - 1 >= 0) {
temp = (grid[row][col] > grid[row - 1][col]) ? grid[row - 1][col] : grid[row][col];
result -= temp;
}
if(row + 1 < gridSize) {
temp = (grid[row][col] > grid[row + 1][col]) ? grid[row + 1][col] : grid[row][col];
result -= temp;
}
if(col - 1 >= 0) {
temp = (grid[row][col] > grid[row][col - 1]) ? grid[row][col - 1] : grid[row][col];
result -= temp;
}
if(col + 1 < *gridColSize) {
temp = (grid[row][col] > grid[row][col + 1]) ? grid[row][col + 1] : grid[row][col];
result -= temp;
}
}
}
}
return result;
}
运行结果: