日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode:892. 三维形体的表面积

發布時間:2025/3/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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. 三维形体的表面积的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。