1. 程式人生 > 其它 >LeetCode-892- 三維形體的表面積(完整程式碼C語言)

LeetCode-892- 三維形體的表面積(完整程式碼C語言)

技術標籤: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**