LeetCode-892- 三維形體的表面積(完整程式碼C語言)
阿新 • • 發佈:2021-01-30
技術標籤:LeetCode刷題筆記leetcodec語言動態規劃指標
LeetCode-892- 三維形體的表面積(完整程式碼C語言)
題目
給你一個 n * n 的網格 grid ,上面放置著一些 1 x 1 x 1 的正方體。
每個值 v = grid[i][j] 表示 v 個正方體疊放在對應單元格 (i, j) 上。
放置好正方體後,任何直接相鄰的正方體都會互相粘在一起,形成一些不規則的三維形體。
請你返回最終這些形體的總表面積。
注意:每個形體的底面也需要計入表面積中。
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/surface-area-of-3d-shapes
示例及提示
示例 1:
輸入:grid = [[2]]
輸出:10
示例 2:
輸入:grid = [[1,2],[3,4]]
輸出:34
示例 3:
輸入:grid = [[1,0],[0,2]]
輸出:16
示例 4:
輸入:grid = [[1,1,1],[1,0,1],[1,1,1]]
輸出:32
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/surface-area-of-3d-shapes
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
程式碼(C語言)
#include<stdio.h>
int surfaceArea(int** grid, int gridSize, int* gridColSize){
int area=0;
for(int i=0;i<gridSize;i++){
for(int j=0;j<*gridColSize;j++){
if(grid[i][j]){
area+=(4*grid[i][j]+2);
if(i!=gridSize-1){
area-=(grid[i][j]>grid[i+1][j] ? 2*grid[i+1][j]:2*grid[ i][j]);
}
if(j!=*gridColSize-1){
area-=(grid[i][j]>grid[i][j+1] ? 2*grid[i][j+1]:2*grid[i][j]);
}
}
}
}
return area;
}
#include <stdlib.h>
int main()
{
int nums[][3]={{1,1,1},{1,0,1},{1,1,1}};
int n=sizeof(nums)/sizeof(nums[0]);
// 為二維陣列分配n行
int **a = (int **)malloc(n * sizeof(int *));
// 為每行分配n列
for(int i = 0; i < n; i++)
{
a[i] = (int *)malloc(n * sizeof(int));
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
a[i][j]=nums[i][j];
}
}
int gridColSize=n;
int result=surfaceArea(a,n,&gridColSize);
printf("%d",result);
return 0;
}
本題主要是對題意的解讀,參考題解中各位大佬的方案。很容易就能想到對矩陣中各元素分別處理,然後根據該元素和相鄰元素之間的關係去除接觸面。
解讀
main函式中寫了一大堆,主要還是“瑪麗”不足的我對函式引數的傳遞的概念瞭解不足。解題中參考了以下資料,小本本記下來以待日後再看!
1.函式引數傳遞
2.關於函式引數int**