LeetCode:892. 三维形体的表面积
892. 三維形體的表面積
- 題目:
- 解題思路:
- 源碼:
- 踩坑點(diǎn):
題目:
解題思路:
我們先來(lái)理解一下題意:
[[1,2],[3,4]]就是一個(gè)二維數(shù)組A。A[i][j]表示每一個(gè)以單位正方形為底的空間上正方體的個(gè)數(shù)。
[[1,2],[3,4]]的意思就是假如我們把底面看作四個(gè)單位正方形,1、2、3、4就表示每個(gè)正方形上有正方體的個(gè)數(shù)。如下圖,第一個(gè)正方形上有一個(gè)正方體;第二個(gè)正方形上有二個(gè)正方體;第三個(gè)正方形上有三個(gè)正方體;第四個(gè)正方形上有四個(gè)正方體。
解題方法:
我們可以對(duì)這樣的一個(gè)二位數(shù)組進(jìn)行遍歷,因?yàn)橄噜彽拿娌荒芩阍诒砻娣e中,所以解題的方法有倆種:
1、累減法:先將所有的面算出來(lái),不考慮相鄰不相鄰,例如一個(gè)8個(gè)正方形,那么一共就有8*6=48個(gè)面;然后判斷有沒(méi)有相鄰,如果相鄰,那么就減去較小高度×2;這樣就會(huì)把相鄰的面去掉,得到最終結(jié)果
2、累加法:初始便面積為0,然后判斷每一個(gè)正方體除去相鄰面后剩下的面,最后相加
源碼:
//累減法 int surfaceArea(int** grid, int gridSize, int* gridColSize){int i,j;int area = 0;int row = gridSize;int col = *gridColSize;for (int i = 0; i < row; i++) {for (int j = 0; j < col; j++) {if (grid[i][j] > 0) area += (grid[i][j] * 4 + 2);}}for(i=0;i<row;i++){for(j=0;j<col;j++){if(j+1 < col && grid[i][j] >= grid[i][j+1])area = area - grid[i][j+1] * 2;if(j+1 < col && grid[i][j] < grid[i][j+1])area = area - grid[i][j] * 2;if(i+1 < gridSize && grid[i][j] >= grid[i+1][j])area = area - grid[i+1][j] * 2;if(i+1 < gridSize && grid[i][j] < grid[i+1][j])area = area - grid[i][j] * 2;}}return area; }踩坑點(diǎn):
1、因?yàn)橐袛嗍欠裣噜?#xff0c;所以會(huì)有i,j的鄰接值的判斷;我的解題方法只判斷右側(cè)和下側(cè),所以最后一列的右側(cè)肯定不用判斷,因?yàn)樽詈笠涣械挠覀?cè)沒(méi)有東西了;最后一行的下側(cè)也不用判斷,因?yàn)樽詈笠恍械南聜?cè)也沒(méi)有東西了,所以有了代碼中的i,j臨界值的判斷。
2、代碼中的col和row的定義也沒(méi)有必要,因?yàn)榭偸钦叫?#xff0c;col=row=gridSize,所以可以統(tǒng)一用gridSize代替。
總結(jié)
以上是生活随笔為你收集整理的LeetCode:892. 三维形体的表面积的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 计组之数据运算:8、c语言之强制类型转化
- 下一篇: 对css float 浮动的学习心得