-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathmain.cpp
More file actions
49 lines (46 loc) · 1.24 KB
/
main.cpp
File metadata and controls
49 lines (46 loc) · 1.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
/***
思路;先计算总共小立方体的表面积-重叠面积
S = 小立方体个数 * 6 - 重叠块 * 2;
***/
class Solution {
public:
int surfaceArea(vector<vector<int>>& grid) {
int sum = 0, num = 0, dup = 0;
for(int i = 0; i < grid.size(); ++i)
{
for(int j = 0; j < grid[i].size(); ++j)
{
if(grid[i][j] != 0)
{
num += grid[i][j]; // 立方体总数
}
if(grid[i][j] > 1)
{
dup = dup + grid[i][j] - 1; // 一个位置上有多个立方体的重复数量
}
if(i + 1 < grid[0].size() && grid[i+1][j] != 0)
{
dup += min(grid[i][j], grid[i+1][j]); // 下方有重叠
}
if(j + 1 < grid.size() && grid[i][j+1] != 0)
{
dup += min(grid[i][j], grid[i][j+1]); // 右面有重叠
}
}
}
sum = num * 6 - dup * 2;
return sum;
}
};
int main()
{
Solution s;
vector<vector<int>> grid = {{2,1},{1,1}};
cout << s.surfaceArea(grid) << endl;
return 0;
}