Skip to content

Commit e8b45a5

Browse files
committed
feat: add solutions to lc problem: No.0892
No.0892.Surface Area of 3D Shapes
1 parent b0ed898 commit e8b45a5

File tree

7 files changed

+229
-8
lines changed

7 files changed

+229
-8
lines changed

solution/0800-0899/0892.Surface Area of 3D Shapes/README.md

Lines changed: 86 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,22 +55,107 @@
5555

5656
<!-- 这里可写通用的实现逻辑 -->
5757

58+
**方法一:遍历,逐个累加**
59+
60+
时间复杂度 $O(n^2)$,空间复杂度 $O(1)$。
61+
5862
<!-- tabs:start -->
5963

6064
### **Python3**
6165

6266
<!-- 这里可写当前语言的特殊实现逻辑 -->
6367

6468
```python
65-
69+
class Solution:
70+
def surfaceArea(self, grid: List[List[int]]) -> int:
71+
ans = 0
72+
for i, row in enumerate(grid):
73+
for j, v in enumerate(row):
74+
if v:
75+
ans += 2 + v * 4
76+
if i:
77+
ans -= min(v, grid[i - 1][j]) * 2
78+
if j:
79+
ans -= min(v, grid[i][j - 1]) * 2
80+
return ans
6681
```
6782

6883
### **Java**
6984

7085
<!-- 这里可写当前语言的特殊实现逻辑 -->
7186

7287
```java
88+
class Solution {
89+
public int surfaceArea(int[][] grid) {
90+
int n = grid.length;
91+
int ans = 0;
92+
for (int i = 0; i < n; ++i) {
93+
for (int j = 0; j < n; ++j) {
94+
if (grid[i][j] > 0) {
95+
ans += 2 + grid[i][j] * 4;
96+
if (i > 0) {
97+
ans -= Math.min(grid[i][j], grid[i - 1][j]) * 2;
98+
}
99+
if (j > 0) {
100+
ans -= Math.min(grid[i][j], grid[i][j - 1]) * 2;
101+
}
102+
}
103+
}
104+
}
105+
return ans;
106+
}
107+
}
108+
```
109+
110+
### **C++**
111+
112+
```cpp
113+
class Solution {
114+
public:
115+
int surfaceArea(vector<vector<int>>& grid) {
116+
int n = grid.size();
117+
int ans = 0;
118+
for (int i = 0; i < n; ++i) {
119+
for (int j = 0; j < n; ++j) {
120+
if (grid[i][j]) {
121+
ans += 2 + grid[i][j] * 4;
122+
if (i) ans -= min(grid[i][j], grid[i - 1][j]) * 2;
123+
if (j) ans -= min(grid[i][j], grid[i][j - 1]) * 2;
124+
}
125+
}
126+
}
127+
return ans;
128+
}
129+
};
130+
```
73131
132+
### **Go**
133+
134+
```go
135+
func surfaceArea(grid [][]int) int {
136+
ans := 0
137+
for i, row := range grid {
138+
for j, v := range row {
139+
if v > 0 {
140+
ans += 2 + v*4
141+
if i > 0 {
142+
ans -= min(v, grid[i-1][j]) * 2
143+
}
144+
if j > 0 {
145+
ans -= min(v, grid[i][j-1]) * 2
146+
}
147+
}
148+
}
149+
}
150+
return ans
151+
}
152+
153+
func min(a, b int) int {
154+
if a < b {
155+
return a
156+
}
157+
return b
158+
}
74159
```
75160

76161
### **...**

solution/0800-0899/0892.Surface Area of 3D Shapes/README_EN.md

Lines changed: 82 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,13 +50,94 @@
5050
### **Python3**
5151

5252
```python
53-
53+
class Solution:
54+
def surfaceArea(self, grid: List[List[int]]) -> int:
55+
ans = 0
56+
for i, row in enumerate(grid):
57+
for j, v in enumerate(row):
58+
if v:
59+
ans += 2 + v * 4
60+
if i:
61+
ans -= min(v, grid[i - 1][j]) * 2
62+
if j:
63+
ans -= min(v, grid[i][j - 1]) * 2
64+
return ans
5465
```
5566

5667
### **Java**
5768

5869
```java
70+
class Solution {
71+
public int surfaceArea(int[][] grid) {
72+
int n = grid.length;
73+
int ans = 0;
74+
for (int i = 0; i < n; ++i) {
75+
for (int j = 0; j < n; ++j) {
76+
if (grid[i][j] > 0) {
77+
ans += 2 + grid[i][j] * 4;
78+
if (i > 0) {
79+
ans -= Math.min(grid[i][j], grid[i - 1][j]) * 2;
80+
}
81+
if (j > 0) {
82+
ans -= Math.min(grid[i][j], grid[i][j - 1]) * 2;
83+
}
84+
}
85+
}
86+
}
87+
return ans;
88+
}
89+
}
90+
```
91+
92+
### **C++**
93+
94+
```cpp
95+
class Solution {
96+
public:
97+
int surfaceArea(vector<vector<int>>& grid) {
98+
int n = grid.size();
99+
int ans = 0;
100+
for (int i = 0; i < n; ++i) {
101+
for (int j = 0; j < n; ++j) {
102+
if (grid[i][j]) {
103+
ans += 2 + grid[i][j] * 4;
104+
if (i) ans -= min(grid[i][j], grid[i - 1][j]) * 2;
105+
if (j) ans -= min(grid[i][j], grid[i][j - 1]) * 2;
106+
}
107+
}
108+
}
109+
return ans;
110+
}
111+
};
112+
```
59113
114+
### **Go**
115+
116+
```go
117+
func surfaceArea(grid [][]int) int {
118+
ans := 0
119+
for i, row := range grid {
120+
for j, v := range row {
121+
if v > 0 {
122+
ans += 2 + v*4
123+
if i > 0 {
124+
ans -= min(v, grid[i-1][j]) * 2
125+
}
126+
if j > 0 {
127+
ans -= min(v, grid[i][j-1]) * 2
128+
}
129+
}
130+
}
131+
}
132+
return ans
133+
}
134+
135+
func min(a, b int) int {
136+
if a < b {
137+
return a
138+
}
139+
return b
140+
}
60141
```
61142

62143
### **...**
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
class Solution {
2+
public:
3+
int surfaceArea(vector<vector<int>>& grid) {
4+
int n = grid.size();
5+
int ans = 0;
6+
for (int i = 0; i < n; ++i) {
7+
for (int j = 0; j < n; ++j) {
8+
if (grid[i][j]) {
9+
ans += 2 + grid[i][j] * 4;
10+
if (i) ans -= min(grid[i][j], grid[i - 1][j]) * 2;
11+
if (j) ans -= min(grid[i][j], grid[i][j - 1]) * 2;
12+
}
13+
}
14+
}
15+
return ans;
16+
}
17+
};
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
func surfaceArea(grid [][]int) int {
2+
ans := 0
3+
for i, row := range grid {
4+
for j, v := range row {
5+
if v > 0 {
6+
ans += 2 + v*4
7+
if i > 0 {
8+
ans -= min(v, grid[i-1][j]) * 2
9+
}
10+
if j > 0 {
11+
ans -= min(v, grid[i][j-1]) * 2
12+
}
13+
}
14+
}
15+
}
16+
return ans
17+
}
18+
19+
func min(a, b int) int {
20+
if a < b {
21+
return a
22+
}
23+
return b
24+
}
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
class Solution {
22
public int surfaceArea(int[][] grid) {
33
int n = grid.length;
4-
int res = 0;
4+
int ans = 0;
55
for (int i = 0; i < n; ++i) {
66
for (int j = 0; j < n; ++j) {
77
if (grid[i][j] > 0) {
8-
res += 2 + grid[i][j] * 4;
8+
ans += 2 + grid[i][j] * 4;
99
if (i > 0) {
10-
res -= Math.min(grid[i][j], grid[i - 1][j]) * 2;
10+
ans -= Math.min(grid[i][j], grid[i - 1][j]) * 2;
1111
}
1212
if (j > 0) {
13-
res -= Math.min(grid[i][j], grid[i][j - 1]) * 2;
13+
ans -= Math.min(grid[i][j], grid[i][j - 1]) * 2;
1414
}
1515
}
1616
}
1717
}
18-
return res;
18+
return ans;
1919
}
20-
}
20+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
class Solution:
2+
def surfaceArea(self, grid: List[List[int]]) -> int:
3+
ans = 0
4+
for i, row in enumerate(grid):
5+
for j, v in enumerate(row):
6+
if v:
7+
ans += 2 + v * 4
8+
if i:
9+
ans -= min(v, grid[i - 1][j]) * 2
10+
if j:
11+
ans -= min(v, grid[i][j - 1]) * 2
12+
return ans

solution/0800-0899/0894.All Possible Full Binary Trees/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@
5050

5151
时间复杂度 $O(2^n)$,空间复杂度 $O(2^n)$。
5252

53+
<!-- tabs:start -->
54+
5355
### **Python3**
5456

5557
<!-- 这里可写当前语言的特殊实现逻辑 -->

0 commit comments

Comments
 (0)