LeetCode:892. 三维形体的表面积
生活随笔
收集整理的這篇文章主要介紹了
LeetCode:892. 三维形体的表面积
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
892. 三維形體的表面積
- 題目:
- 解題思路:
- 源碼:
- 踩坑點:
題目:
解題思路:
我們先來理解一下題意:
[[1,2],[3,4]]就是一個二維數組A。A[i][j]表示每一個以單位正方形為底的空間上正方體的個數。
[[1,2],[3,4]]的意思就是假如我們把底面看作四個單位正方形,1、2、3、4就表示每個正方形上有正方體的個數。如下圖,第一個正方形上有一個正方體;第二個正方形上有二個正方體;第三個正方形上有三個正方體;第四個正方形上有四個正方體。
解題方法:
我們可以對這樣的一個二位數組進行遍歷,因為相鄰的面不能算在表面積中,所以解題的方法有倆種:
1、累減法:先將所有的面算出來,不考慮相鄰不相鄰,例如一個8個正方形,那么一共就有8*6=48個面;然后判斷有沒有相鄰,如果相鄰,那么就減去較小高度×2;這樣就會把相鄰的面去掉,得到最終結果
2、累加法:初始便面積為0,然后判斷每一個正方體除去相鄰面后剩下的面,最后相加
源碼:
//累減法 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; }踩坑點:
1、因為要判斷是否相鄰,所以會有i,j的鄰接值的判斷;我的解題方法只判斷右側和下側,所以最后一列的右側肯定不用判斷,因為最后一列的右側沒有東西了;最后一行的下側也不用判斷,因為最后一行的下側也沒有東西了,所以有了代碼中的i,j臨界值的判斷。
2、代碼中的col和row的定義也沒有必要,因為總是正方形,col=row=gridSize,所以可以統一用gridSize代替。
總結
以上是生活随笔為你收集整理的LeetCode:892. 三维形体的表面积的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计组之数据运算:8、c语言之强制类型转化
- 下一篇: 对css float 浮动的学习心得