LeetCode892 三維形體的表面積c

2021-08-25 22:26:01 字數 1445 閱讀 3071

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

解析:我這個題一開始做的有問題,但是通過了也懶得改了,我用的是最傻的方法,頂面積和底面積和就是xy面的投影,就是非零元素個數*2,側面積:找出grid陣列中最大值maxn,把所有方塊進行分層,從0-maxn-1;這樣每一層就是乙個二維陣列0個或者1個,然後從0,0點開始遍歷,如果當前遍歷的節點值為1,sum+4,同時如果(以00為左下)左邊節點也是1,就-2,如果下面節點也有方塊,即也是1,就再-2,如此遍歷所有節點得到這一層的側面積,遍歷所有層。想著50*50*50也沒有多大,不知道為啥就跑到接近兩秒,剛好通過;

第二種:真正的解法應該是,頂面積底面積一樣計算,側面積從0,0點開始遍歷(不分層),到任何乙個點,sum+4*節點個數-2*(min(左側方塊個數,當前方塊個數))-2(min(下側方塊個數,當前方塊個數));應該不難理解,就是疊積木,把重疊的面積減掉;

第二種解如下(執行時間72ms):

class solution       

};

第一種解(執行時間1876ms):

class solution 

for(int h=0;h> curlevel(grid.size(),vector(grid[0].size(),0));

for(int i=0;i0)

else

}sum+=levelcal(curlevel);

}sum+=2*x;

return sum;

}int levelcal(vector> curlevel)

};

LeetCode892 三維形體的表面積

題目描述 在 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...

LeetCode 892 三維形體的表面積

892.三維形體的表面積 在 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 輸出...

LeetCode 892 三維形體的表面積

表面積 頂面積 底面積 側面積 只要單元格內有正方體,它就貢獻出底面 表面 即v 0,等於表面積 2 側面積用v跟相鄰單元格的v比較,若v 相鄰單元格v2,則側面積 v v2,反之 0 單元格grid i j 的相鄰單元格為grid i 1 j grid i 1 j grid i j 1 grid ...