Skip to content

Commit 51f62db

Browse files
committed
💚Upload 0892 Solution
💚Upload 0892 Solution
1 parent 7aa4569 commit 51f62db

File tree

1 file changed

+142
-0
lines changed

1 file changed

+142
-0
lines changed
Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
> LeetCode 0892. Surface Area of 3D Shapes三维形体的表面积【Easy】【Python】【数学】
2+
3+
### Problem
4+
5+
[LeetCode](https://leetcode.com/problems/surface-area-of-3d-shapes/)
6+
7+
On a `N * N` grid, we place some `1 * 1 * 1 `cubes.
8+
9+
Each value `v = grid[i][j]` represents a tower of `v` cubes placed on top of grid cell `(i, j)`.
10+
11+
Return the total surface area of the resulting shapes.
12+
13+
**Example 1:**
14+
15+
```
16+
Input: [[2]]
17+
Output: 10
18+
```
19+
20+
**Example 2:**
21+
22+
```
23+
Input: [[1,2],[3,4]]
24+
Output: 34
25+
```
26+
27+
**Example 3:**
28+
29+
```
30+
Input: [[1,0],[0,2]]
31+
Output: 16
32+
```
33+
34+
**Example 4:**
35+
36+
```
37+
Input: [[1,1,1],[1,0,1],[1,1,1]]
38+
Output: 32
39+
```
40+
41+
**Example 5:**
42+
43+
```
44+
Input: [[2,2,2],[2,1,2],[2,2,2]]
45+
Output: 46
46+
```
47+
48+
**Note:**
49+
50+
- `1 <= N <= 50`
51+
- `0 <= grid[i][j] <= 50`
52+
53+
### 问题
54+
55+
[力扣](https://leetcode-cn.com/problems/surface-area-of-3d-shapes/)
56+
57+
在 N * N 的网格上,我们放置一些 1 * 1 * 1 的立方体。
58+
59+
每个值 v = grid[i][j] 表示 v 个正方体叠放在对应单元格 (i, j) 上。
60+
61+
请你返回最终形体的表面积。
62+
63+
**示例 1:**
64+
65+
```
66+
输入:[[2]]
67+
输出:10
68+
```
69+
70+
**示例 2:**
71+
72+
```
73+
输入:[[1,2],[3,4]]
74+
输出:34
75+
```
76+
77+
**示例 3:**
78+
79+
```
80+
输入:[[1,0],[0,2]]
81+
输出:16
82+
```
83+
84+
**示例 4:**
85+
86+
```
87+
输入:[[1,1,1],[1,0,1],[1,1,1]]
88+
输出:32
89+
```
90+
91+
**示例 5:**
92+
93+
```
94+
输入:[[2,2,2],[2,1,2],[2,2,2]]
95+
输出:46
96+
```
97+
98+
**提示:**
99+
100+
* `1 <= N <= 50`
101+
* `0 <= grid[i][j] <= 50`
102+
103+
### 思路
104+
105+
**数学**
106+
107+
```
108+
从反面来考虑,先计算有多少叠起来的面,最后减去叠起来面。
109+
110+
叠起来的 v 个立方体有 v-1 个接触面,分两种情况:
111+
1. 当前柱子与上边柱子接触
112+
2. 当前柱子与左边柱子接触
113+
```
114+
115+
**时间复杂度:** O(n^2)
116+
**空间复杂度:** O(1)
117+
118+
##### Python3代码
119+
120+
```python
121+
class Solution:
122+
def surfaceArea(self, grid: List[List[int]]) -> int:
123+
n = len(grid)
124+
cubes, faces = 0, 0
125+
for i in range(n):
126+
for j in range(n):
127+
cubes += grid[i][j]
128+
if grid[i][j] > 0:
129+
# 叠起来的 v 个立方体有 v-1 个接触面
130+
faces += grid[i][j] - 1
131+
if i > 0:
132+
# 当前柱子与上边柱子的接触面数量
133+
faces += min(grid[i-1][j], grid[i][j])
134+
if j > 0:
135+
# 当前柱子与左边柱子的接触面数量
136+
faces += min(grid[i][j-1], grid[i][j])
137+
return 6 * cubes - 2 * faces
138+
```
139+
140+
### GitHub链接
141+
142+
[Python](https://github.com/Wonz5130/LeetCode-Solutions/blob/master/solutions/0892-Surface-Area-of-3D-Shapes/0892.py)

0 commit comments

Comments
 (0)