Skip to content

Commit a4c856d

Browse files
committed
feat: add solutions to lc problem: No.0393
No.0393.UTF-8 Validation
1 parent f6030d5 commit a4c856d

File tree

35 files changed

+1274
-94
lines changed

35 files changed

+1274
-94
lines changed

solution/0000-0099/0087.Scramble String/README_EN.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,12 @@
2828
<strong>Explanation:</strong> One possible scenario applied on s1 is:
2929
&quot;great&quot; --&gt; &quot;gr/eat&quot; // divide at random index.
3030
&quot;gr/eat&quot; --&gt; &quot;gr/eat&quot; // random decision is not to swap the two substrings and keep them in order.
31-
&quot;gr/eat&quot; --&gt; &quot;g/r / e/at&quot; // apply the same algorithm recursively on both substrings. divide at ranom index each of them.
31+
&quot;gr/eat&quot; --&gt; &quot;g/r / e/at&quot; // apply the same algorithm recursively on both substrings. divide at random index each of them.
3232
&quot;g/r / e/at&quot; --&gt; &quot;r/g / e/at&quot; // random decision was to swap the first substring and to keep the second substring in the same order.
3333
&quot;r/g / e/at&quot; --&gt; &quot;r/g / e/ a/t&quot; // again apply the algorithm recursively, divide &quot;at&quot; to &quot;a/t&quot;.
3434
&quot;r/g / e/ a/t&quot; --&gt; &quot;r/g / e/ a/t&quot; // random decision is to keep both substrings in the same order.
35-
The algorithm stops now and the result string is &quot;rgeat&quot; which is s2.
36-
As there is one possible scenario that led s1 to be scrambled to s2, we return true.
35+
The algorithm stops now, and the result string is &quot;rgeat&quot; which is s2.
36+
As one possible scenario led s1 to be scrambled to s2, we return true.
3737
</pre>
3838

3939
<p><strong>Example 2:</strong></p>
@@ -56,7 +56,7 @@ As there is one possible scenario that led s1 to be scrambled to s2, we return t
5656
<ul>
5757
<li><code>s1.length == s2.length</code></li>
5858
<li><code>1 &lt;= s1.length &lt;= 30</code></li>
59-
<li><code>s1</code> and <code>s2</code> consist of lower-case English letters.</li>
59+
<li><code>s1</code> and <code>s2</code> consist of lowercase English letters.</li>
6060
</ul>
6161

6262
## Solutions

solution/0300-0399/0393.UTF-8 Validation/README.md

+94-1
Original file line numberDiff line numberDiff line change
@@ -71,15 +71,108 @@
7171
<!-- 这里可写当前语言的特殊实现逻辑 -->
7272

7373
```python
74-
74+
class Solution:
75+
def validUtf8(self, data: List[int]) -> bool:
76+
n = 0
77+
for v in data:
78+
if n > 0:
79+
if v >> 6 != 0b10:
80+
return False
81+
n -= 1
82+
elif v >> 7 == 0:
83+
n = 0
84+
elif v >> 5 == 0b110:
85+
n = 1
86+
elif v >> 4 == 0b1110:
87+
n = 2
88+
elif v >> 3 == 0b11110:
89+
n = 3
90+
else:
91+
return False
92+
return n == 0
7593
```
7694

7795
### **Java**
7896

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

8199
```java
100+
class Solution {
101+
public boolean validUtf8(int[] data) {
102+
int n = 0;
103+
for (int v : data) {
104+
if (n > 0) {
105+
if (v >> 6 != 0b10) {
106+
return false;
107+
}
108+
--n;
109+
} else if (v >> 7 == 0) {
110+
n = 0;
111+
} else if (v >> 5 == 0b110) {
112+
n = 1;
113+
} else if (v >> 4 == 0b1110) {
114+
n = 2;
115+
} else if (v >> 3 == 0b11110) {
116+
n = 3;
117+
} else {
118+
return false;
119+
}
120+
}
121+
return n == 0;
122+
}
123+
}
124+
```
125+
126+
### **C++**
127+
128+
```cpp
129+
class Solution {
130+
public:
131+
bool validUtf8(vector<int>& data) {
132+
int n = 0;
133+
for (int& v : data)
134+
{
135+
if (n > 0)
136+
{
137+
if (v >> 6 != 0b10) return false;
138+
--n;
139+
}
140+
else if (v >> 7 == 0) n = 0;
141+
else if (v >> 5 == 0b110) n = 1;
142+
else if (v >> 4 == 0b1110) n = 2;
143+
else if (v >> 3 == 0b11110) n = 3;
144+
else return false;
145+
}
146+
return n == 0;
147+
}
148+
};
149+
```
82150
151+
### **Go**
152+
153+
```go
154+
func validUtf8(data []int) bool {
155+
n := 0
156+
for _, v := range data {
157+
if n > 0 {
158+
if v>>6 != 0b10 {
159+
return false
160+
}
161+
n--
162+
} else if v>>7 == 0 {
163+
n = 0
164+
} else if v>>5 == 0b110 {
165+
n = 1
166+
} else if v>>4 == 0b1110 {
167+
n = 2
168+
} else if v>>3 == 0b11110 {
169+
n = 3
170+
} else {
171+
return false
172+
}
173+
}
174+
return n == 0
175+
}
83176
```
84177

85178
### **...**

solution/0300-0399/0393.UTF-8 Validation/README_EN.md

+94-1
Original file line numberDiff line numberDiff line change
@@ -63,13 +63,106 @@ But the second continuation byte does not start with 10, so it is invalid.
6363
### **Python3**
6464

6565
```python
66-
66+
class Solution:
67+
def validUtf8(self, data: List[int]) -> bool:
68+
n = 0
69+
for v in data:
70+
if n > 0:
71+
if v >> 6 != 0b10:
72+
return False
73+
n -= 1
74+
elif v >> 7 == 0:
75+
n = 0
76+
elif v >> 5 == 0b110:
77+
n = 1
78+
elif v >> 4 == 0b1110:
79+
n = 2
80+
elif v >> 3 == 0b11110:
81+
n = 3
82+
else:
83+
return False
84+
return n == 0
6785
```
6886

6987
### **Java**
7088

7189
```java
90+
class Solution {
91+
public boolean validUtf8(int[] data) {
92+
int n = 0;
93+
for (int v : data) {
94+
if (n > 0) {
95+
if (v >> 6 != 0b10) {
96+
return false;
97+
}
98+
--n;
99+
} else if (v >> 7 == 0) {
100+
n = 0;
101+
} else if (v >> 5 == 0b110) {
102+
n = 1;
103+
} else if (v >> 4 == 0b1110) {
104+
n = 2;
105+
} else if (v >> 3 == 0b11110) {
106+
n = 3;
107+
} else {
108+
return false;
109+
}
110+
}
111+
return n == 0;
112+
}
113+
}
114+
```
115+
116+
### **C++**
117+
118+
```cpp
119+
class Solution {
120+
public:
121+
bool validUtf8(vector<int>& data) {
122+
int n = 0;
123+
for (int& v : data)
124+
{
125+
if (n > 0)
126+
{
127+
if (v >> 6 != 0b10) return false;
128+
--n;
129+
}
130+
else if (v >> 7 == 0) n = 0;
131+
else if (v >> 5 == 0b110) n = 1;
132+
else if (v >> 4 == 0b1110) n = 2;
133+
else if (v >> 3 == 0b11110) n = 3;
134+
else return false;
135+
}
136+
return n == 0;
137+
}
138+
};
139+
```
72140
141+
### **Go**
142+
143+
```go
144+
func validUtf8(data []int) bool {
145+
n := 0
146+
for _, v := range data {
147+
if n > 0 {
148+
if v>>6 != 0b10 {
149+
return false
150+
}
151+
n--
152+
} else if v>>7 == 0 {
153+
n = 0
154+
} else if v>>5 == 0b110 {
155+
n = 1
156+
} else if v>>4 == 0b1110 {
157+
n = 2
158+
} else if v>>3 == 0b11110 {
159+
n = 3
160+
} else {
161+
return false
162+
}
163+
}
164+
return n == 0
165+
}
73166
```
74167

75168
### **...**
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,20 @@
11
class Solution {
22
public:
33
bool validUtf8(vector<int>& data) {
4-
const unsigned modeContinue = 0xc0 ;
5-
6-
int conti = 0 ;
7-
for (auto it = data.begin(); it < data.end(); ++it)
4+
int n = 0;
5+
for (int& v : data)
86
{
9-
10-
if (0 == conti) // 首字节
7+
if (n > 0)
118
{
12-
if (*it < 0x80)
13-
continue ;
14-
else if (*it < 0xe0)
15-
conti = 1 ;
16-
else if (*it < 0xf0)
17-
conti = 2 ;
18-
else if (*it < 0xf8)
19-
conti = 3 ;
20-
else
21-
return false ;
22-
}
23-
else // 后续字节
24-
{
25-
--conti ;
26-
if ((*it & modeContinue) != 0x80)
27-
return false ;
9+
if (v >> 6 != 0b10) return false;
10+
--n;
2811
}
12+
else if (v >> 7 == 0) n = 0;
13+
else if (v >> 5 == 0b110) n = 1;
14+
else if (v >> 4 == 0b1110) n = 2;
15+
else if (v >> 3 == 0b11110) n = 3;
16+
else return false;
2917
}
30-
31-
return 0 == conti ;
18+
return n == 0;
3219
}
3320
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
func validUtf8(data []int) bool {
2+
n := 0
3+
for _, v := range data {
4+
if n > 0 {
5+
if v>>6 != 0b10 {
6+
return false
7+
}
8+
n--
9+
} else if v>>7 == 0 {
10+
n = 0
11+
} else if v>>5 == 0b110 {
12+
n = 1
13+
} else if v>>4 == 0b1110 {
14+
n = 2
15+
} else if v>>3 == 0b11110 {
16+
n = 3
17+
} else {
18+
return false
19+
}
20+
}
21+
return n == 0
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
class Solution {
2+
public boolean validUtf8(int[] data) {
3+
int n = 0;
4+
for (int v : data) {
5+
if (n > 0) {
6+
if (v >> 6 != 0b10) {
7+
return false;
8+
}
9+
--n;
10+
} else if (v >> 7 == 0) {
11+
n = 0;
12+
} else if (v >> 5 == 0b110) {
13+
n = 1;
14+
} else if (v >> 4 == 0b1110) {
15+
n = 2;
16+
} else if (v >> 3 == 0b11110) {
17+
n = 3;
18+
} else {
19+
return false;
20+
}
21+
}
22+
return n == 0;
23+
}
24+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
class Solution:
2+
def validUtf8(self, data: List[int]) -> bool:
3+
n = 0
4+
for v in data:
5+
if n > 0:
6+
if v >> 6 != 0b10:
7+
return False
8+
n -= 1
9+
elif v >> 7 == 0:
10+
n = 0
11+
elif v >> 5 == 0b110:
12+
n = 1
13+
elif v >> 4 == 0b1110:
14+
n = 2
15+
elif v >> 3 == 0b11110:
16+
n = 3
17+
else:
18+
return False
19+
return n == 0

solution/0400-0499/0417.Pacific Atlantic Water Flow/README.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@
66

77
<!-- 这里写题目描述 -->
88

9-
<p>有一个 <code>m × n</code> 的长方形岛屿,与 <strong>太平洋</strong> 和 <strong>大西洋</strong> 相邻。&nbsp;<strong>“太平洋”&nbsp;</strong>处于大陆的左边界和上边界,而 <strong>“大西洋”</strong> 处于大陆的右边界和下边界。</p>
9+
<p>有一个 <code>m × n</code> 的矩形岛屿,与 <strong>太平洋</strong> 和 <strong>大西洋</strong> 相邻。&nbsp;<strong>“太平洋”&nbsp;</strong>处于大陆的左边界和上边界,而 <strong>“大西洋”</strong> 处于大陆的右边界和下边界。</p>
1010

11-
<p>这个岛被分割成一个个方格网格。给定一个 <code>m x n</code> 的整数矩阵&nbsp;<code>heights</code>&nbsp;&nbsp;<code>heights[r][c]</code>&nbsp;表示坐标 <code>(r, c)</code> 上单元格 <strong>高于海平面的高度</strong> 。</p>
11+
<p>这个岛被分割成一个由若干方形单元格组成的网格。给定一个 <code>m x n</code> 的整数矩阵&nbsp;<code>heights</code>&nbsp;&nbsp;<code>heights[r][c]</code>&nbsp;表示坐标 <code>(r, c)</code> 上单元格 <strong>高于海平面的高度</strong> 。</p>
1212

13-
<p>岛上雨水较多,如果相邻小区的高度 <strong>小于或等于</strong> 当前小区的高度,雨水可以直接向北、南、东、西流向相邻小区。水可以从海洋附近的任何细胞流入海洋。</p>
13+
<p>岛上雨水较多,如果相邻单元格的高度 <strong>小于或等于</strong> 当前单元格的高度,雨水可以直接向北、南、东、西流向相邻单元格。水可以从海洋附近的任何单元格流入海洋。</p>
1414

1515
<p>返回 <em>网格坐标 <code>result</code>&nbsp;的 <strong>2D列表</strong> ,其中&nbsp;<code>result[i] = [r<sub>i</sub>, c<sub>i</sub>]</code>&nbsp;表示雨水可以从单元格 <code>(ri, ci)</code> 流向 <strong>太平洋和大西洋</strong></em> 。</p>
1616

0 commit comments

Comments
 (0)