Skip to content

Commit 81dfcbd

Browse files
authored
feat: add biweekly contest 130 (#2793)
1 parent b488904 commit 81dfcbd

File tree

31 files changed

+973
-233
lines changed

31 files changed

+973
-233
lines changed

solution/0000-0099/0008.String to Integer (atoi)/README.md

+72-37
Original file line numberDiff line numberDiff line change
@@ -8,74 +8,109 @@
88

99
<!-- 这里写题目描述 -->
1010

11-
<p>请你来实现一个&nbsp;<code>myAtoi(string s)</code>&nbsp;函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 <code>atoi</code> 函数)。</p>
11+
<p>请你来实现一个&nbsp;<code>myAtoi(string s)</code>&nbsp;函数,使其能将字符串转换成一个 32 位有符号整数。</p>
1212

1313
<p>函数&nbsp;<code>myAtoi(string s)</code> 的算法如下:</p>
1414

1515
<ol>
16-
<li>读入字符串并丢弃无用的前导空格</li>
17-
<li>检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。</li>
18-
<li>读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。</li>
19-
<li>将前面步骤读入的这些数字转换为整数(即,"123" -&gt; 123, "0032" -&gt; 32)。如果没有读入数字,则整数为 <code>0</code> 。必要时更改符号(从步骤 2 开始)。</li>
20-
<li>如果整数数超过 32 位有符号整数范围 <code>[−2<sup>31</sup>,&nbsp; 2<sup>31&nbsp;</sup>− 1]</code> ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 <code>−2<sup>31</sup></code> 的整数应该被固定为 <code>−2<sup>31</sup></code> ,大于 <code>2<sup>31&nbsp;</sup>− 1</code> 的整数应该被固定为 <code>2<sup>31&nbsp;</sup>− 1</code> 。</li>
21-
<li>返回整数作为最终结果。</li>
16+
<li><strong>空格:</strong>读入字符串并丢弃无用的前导空格(<code>" "</code>)</li>
17+
<li><strong>符号:</strong>检查下一个字符(假设还未到字符末尾)为&nbsp;<code>'-'</code> 还是 <code>'+'</code>。如果两者都不存在,则假定结果为正。</li>
18+
<li><strong>转换:</strong>通过跳过前置零来读取该整数,直到遇到非数字字符或到达字符串的结尾。如果没有读取数字,则结果为0。</li>
19+
<li><b>舍入:</b>如果整数数超过 32 位有符号整数范围 <code>[−2<sup>31</sup>,&nbsp; 2<sup>31&nbsp;</sup>− 1]</code> ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 <code>−2<sup>31</sup></code> 的整数应该被舍入为 <code>−2<sup>31</sup></code> ,大于 <code>2<sup>31&nbsp;</sup>− 1</code> 的整数应该被舍入为 <code>2<sup>31&nbsp;</sup>− 1</code> 。</li>
2220
</ol>
2321

24-
<p><strong>注意:</strong></p>
25-
26-
<ul>
27-
<li>本题中的空白字符只包括空格字符 <code>' '</code> 。</li>
28-
<li>除前导空格或数字后的其余字符串外,<strong>请勿忽略</strong> 任何其他字符。</li>
29-
</ul>
22+
<p>返回整数作为最终结果。</p>
3023

3124
<p>&nbsp;</p>
3225

33-
<p><strong>示例&nbsp;1:</strong></p>
26+
<p><strong class="example">示例&nbsp;1:</strong></p>
27+
28+
<div class="example-block">
29+
<p><strong>输入:</strong><span class="example-io">s = "42"</span></p>
30+
31+
<p><strong>输出:</strong><span class="example-io">42</span></p>
32+
33+
<p><strong>解释:</strong>加粗的字符串为已经读入的字符,插入符号是当前读取的字符。</p>
3434

3535
<pre>
36-
<strong>输入:</strong>s = "42"
37-
<strong>输出:</strong>42
38-
<strong>解释:</strong>加粗的字符串为已经读入的字符,插入符号是当前读取的字符。
36+
带下划线线的字符是所读的内容,插入符号是当前读入位置。
3937
第 1 步:"42"(当前没有读入字符,因为没有前导空格)
4038
^
4139
第 2 步:"42"(当前没有读入字符,因为这里不存在 '-' 或者 '+')
4240
^
4341
第 3 步:"<u>42</u>"(读入 "42")
4442
^
45-
解析得到整数 42 。
46-
由于 "42" 在范围 [-2<sup>31</sup>, 2<sup>31</sup> - 1] 内,最终结果为 42 。</pre>
43+
</pre>
44+
</div>
4745

48-
<p><strong>示例&nbsp;2:</strong></p>
46+
<p><strong class="example">示例&nbsp;2:</strong></p>
47+
48+
<div class="example-block">
49+
<p><strong>输入:</strong><span class="example-io">s = " -042"</span></p>
50+
51+
<p><strong>输出:</strong><span class="example-io">-42</span></p>
52+
53+
<p><strong>解释:</strong></p>
4954

5055
<pre>
51-
<strong>输入:</strong>s = " -42"
52-
<strong>输出:</strong>-42
53-
<strong>解释:</strong>
54-
第 1 步:"<u><strong> </strong></u>-42"(读入前导空格,但忽视掉)
56+
第 1 步:"<u><strong> </strong></u>-042"(读入前导空格,但忽视掉)
5557
^
56-
第 2 步:" <u><strong>-</strong></u>42"(读入 '-' 字符,所以结果应该是负数)
58+
第 2 步:" <u>-</u>042"(读入 '-' 字符,所以结果应该是负数)
5759
^
58-
第 3 步:" <u><strong>-42</strong></u>"(读入 "42"
60+
第 3 步:" <u>-042</u>"(读入 "042",在结果中忽略前导零
5961
^
60-
解析得到整数 -42 。
61-
由于 "-42" 在范围 [-2<sup>31</sup>, 2<sup>31</sup> - 1] 内,最终结果为 -42 。
6262
</pre>
63+
</div>
64+
65+
<p><strong class="example">示例&nbsp;3:</strong></p>
6366

64-
<p><strong>示例&nbsp;3:</strong></p>
67+
<div class="example-block">
68+
<p><strong>输入:</strong><span class="example-io">s = "</span>1337c0d3<span class="example-io">"</span></p>
69+
70+
<p><strong>输出:</strong><span class="example-io">1337</span></p>
71+
72+
<p><strong>解释:</strong></p>
6573

6674
<pre>
67-
<strong>输入:</strong>s = "4193 with words"
68-
<strong>输出:</strong>4193
69-
<strong>解释:</strong>
70-
第 1 步:"4193 with words"(当前没有读入字符,因为没有前导空格)
75+
第 1 步:"1337c0d3"(当前没有读入字符,因为没有前导空格)
7176
^
72-
第 2 步:"4193 with words"(当前没有读入字符,因为这里不存在 '-' 或者 '+')
77+
第 2 步:"1337c0d3"(当前没有读入字符,因为这里不存在 '-' 或者 '+')
7378
^
74-
第 3 步:"<u>4193</u> with words"(读入 "4193";由于下一个字符不是一个数字,所以读入停止)
79+
第 3 步:"1337c0d3"(读入 "1337";由于下一个字符不是一个数字,所以读入停止)
7580
^
76-
解析得到整数 4193 。
77-
由于 "4193" 在范围 [-2<sup>31</sup>, 2<sup>31</sup> - 1] 内,最终结果为 4193 。
7881
</pre>
82+
</div>
83+
84+
<p><strong class="example">示例 4:</strong></p>
85+
86+
<div class="example-block">
87+
<p><strong>输入:</strong><span class="example-io">s = "0-1"</span></p>
88+
89+
<p><span class="example-io"><b>输出:</b>0</span></p>
90+
91+
<p><strong>解释:</strong></p>
92+
93+
<pre>
94+
第 1 步:"0-1" (当前没有读入字符,因为没有前导空格)
95+
^
96+
第 2 步:"0-1" (当前没有读入字符,因为这里不存在 '-' 或者 '+')
97+
^
98+
第 3 步:"<u>0</u>-1" (读入 "0";由于下一个字符不是一个数字,所以读入停止)
99+
^
100+
</pre>
101+
</div>
102+
103+
<p><strong class="example">示例 5:</strong></p>
104+
105+
<div class="example-block">
106+
<p><strong>输入:</strong><span class="example-io">s = "words and 987"</span></p>
107+
108+
<p><strong>输出:</strong><span class="example-io">0</span></p>
109+
110+
<p><strong>解释:</strong></p>
111+
112+
<p>读取在第一个非数字字符“w”处停止。</p>
113+
</div>
79114

80115
<p>&nbsp;</p>
81116

solution/0100-0199/0165.Compare Version Numbers/README.md

+33-23
Original file line numberDiff line numberDiff line change
@@ -8,45 +8,55 @@
88

99
<!-- 这里写题目描述 -->
1010

11-
<p>给你两个版本号 <code>version1</code> 和 <code>version2</code> ,请你比较它们。</p>
11+
<p>给你两个 <strong>版本号字符串</strong>&nbsp;<code>version1</code> 和 <code>version2</code> ,请你比较它们。版本号由被点&nbsp;<code>'.'</code> 分开的修订号组成。<strong>修订号的值</strong> 是它 <strong>转换为整数</strong> 并忽略前导零。</p>
1212

13-
<p>版本号由一个或多个修订号组成,各修订号由一个 <code>'.'</code> 连接。每个修订号由 <strong>多位数字</strong> 组成,可能包含 <strong>前导零</strong> 。每个版本号至少包含一个字符。修订号从左到右编号,下标从 0 开始,最左边的修订号下标为 0 ,下一个修订号下标为 1 ,以此类推。例如,<code>2.5.33</code> 和 <code>0.1</code> 都是有效的版本号。</p>
14-
15-
<p>比较版本号时,请按从左到右的顺序依次比较它们的修订号。比较修订号时,只需比较 <strong>忽略任何前导零后的整数值</strong> 。也就是说,修订号 <code>1</code> 和修订号 <code>001</code> <strong>相等 </strong>。如果版本号没有指定某个下标处的修订号,则该修订号视为 <code>0</code> 。例如,版本 <code>1.0</code> 小于版本 <code>1.1</code> ,因为它们下标为 <code>0</code> 的修订号相同,而下标为 <code>1</code> 的修订号分别为 <code>0</code> 和 <code>1</code> ,<code>0 &lt; 1</code> 。</p>
13+
<p>比较版本号时,请按 <strong>从左到右的顺序</strong> 依次比较它们的修订号。如果其中一个版本字符串的修订号较少,则将缺失的修订号视为 <code>0</code>。</p>
1614

1715
<p>返回规则如下:</p>
1816

1917
<ul>
20-
<li>如果&nbsp;<code><em>version1&nbsp;</em>&gt;&nbsp;<em>version2</em></code>&nbsp;返回&nbsp;<code>1</code>,</li>
2118
<li>如果&nbsp;<code><em>version1&nbsp;</em>&lt;&nbsp;<em>version2</em></code> 返回 <code>-1</code>,</li>
19+
<li>如果&nbsp;<code><em>version1&nbsp;</em>&gt;&nbsp;<em>version2</em></code>&nbsp;返回&nbsp;<code>1</code>,</li>
2220
<li>除此之外返回 <code>0</code>。</li>
2321
</ul>
2422

2523
<p>&nbsp;</p>
2624

27-
<p><strong>示例 1:</strong></p>
25+
<p><strong class="example">示例 1:</strong></p>
26+
27+
<div class="example-block">
28+
<p><strong>输入:</strong><span class="example-io">version1 = "1.2", version2 = "1.10"</span></p>
29+
30+
<p><strong>输出:</strong><span class="example-io">-1</span></p>
31+
32+
<p><strong>解释:</strong></p>
33+
34+
<p>version1 的第二个修订号为&nbsp;"2",version2 的第二个修订号为 "10":2 &lt; 10,所以 version1 &lt; version2。</p>
35+
</div>
36+
37+
<p><strong class="example">示例 2:</strong></p>
38+
39+
<div class="example-block">
40+
<p><strong>输入:</strong><span class="example-io">version1 = "1.01", version2 = "1.001"</span></p>
41+
42+
<p><strong>输出:</strong><span class="example-io">0</span></p>
43+
44+
<p><strong>解释:</strong></p>
45+
46+
<p>忽略前导零,"01" 和 "001" 都代表相同的整数 "1"。</p>
47+
</div>
2848

29-
<pre>
30-
<strong>输入:</strong>version1 = "1.01", version2 = "1.001"
31-
<strong>输出:</strong>0
32-
<strong>解释:</strong>忽略前导零,"01" 和 "001" 都表示相同的整数 "1"
33-
</pre>
49+
<p><strong class="example">示例 3:</strong></p>
3450

35-
<p><strong>示例 2:</strong></p>
51+
<div class="example-block">
52+
<p><strong>输入:</strong><span class="example-io">version1 = "1.0", version2 = "1.0.0.0"</span></p>
3653

37-
<pre>
38-
<strong>输入:</strong>version1 = "1.0", version2 = "1.0.0"
39-
<strong>输出:</strong>0
40-
<strong>解释:</strong>version1 没有指定下标为 2 的修订号,即视为 "0"
41-
</pre>
54+
<p><strong>输出:</strong><span class="example-io">0</span></p>
4255

43-
<p><strong>示例 3:</strong></p>
56+
<p><strong>解释:</strong></p>
4457

45-
<pre>
46-
<strong>输入:</strong>version1 = "0.1", version2 = "1.1"
47-
<strong>输出:</strong>-1
48-
<strong>解释:</strong>version1 中下标为 0 的修订号是 "0",version2 中下标为 0 的修订号是 "1" 。0 &lt; 1,所以 version1 &lt; version2
49-
</pre>
58+
<p>version1 有更少的修订号,每个缺失的修订号按 "0" 处理。</p>
59+
</div>
5060

5161
<p>&nbsp;</p>
5262

solution/0400-0499/0422.Valid Word Square/README.md

+37-77
Original file line numberDiff line numberDiff line change
@@ -8,98 +8,58 @@
88

99
<!-- 这里写题目描述 -->
1010

11-
<p>给你一个单词序列,判断其是否形成了一个有效的单词方块。</p>
11+
<p>给你一个字符串数组 <code>words</code>,如果它能形成一个有效的<strong> 单词方块 </strong>,则返回 <code>true</code> <em>。</em></p>
1212

13-
<p>有效的单词方块是指此由单词序列组成的文字方块的&nbsp;第 k 行 和&nbsp;第 k 列 (0 ≤ <em>k</em> &lt; max(行数, 列数)) 所显示的字符串完全相同。</p>
14-
15-
<p><strong>注意:</strong></p>
16-
17-
<ol>
18-
<li>给定的单词数大于等于 1 且不超过 500。</li>
19-
<li>单词长度大于等于 1 且不超过 500。</li>
20-
<li>每个单词只包含小写英文字母&nbsp;<code>a-z</code>。</li>
21-
</ol>
13+
<p>有效的单词方块是指此由字符串数组组成的文字方块的&nbsp;第 <code>k</code> 行 和&nbsp;第 <code>k</code> 列所显示的字符串完全相同,其中 <code>0 &lt;= k &lt; max(numRows, numColumns)</code> 。</p>
2214

2315
<p>&nbsp;</p>
2416

25-
<p><strong>示例 1:</strong></p>
26-
27-
<p><strong><img alt="" src="https://fastly.jsdelivr.net/gh/doocs/leetcode@main/solution/0400-0499/0422.Valid%20Word%20Square/images/1713840723-rPoAKZ-image.png" style="width: 333px; height: 333px;" /></strong></p>
28-
17+
<p><strong class="example">示例 1:</strong></p>
18+
<img alt="" src="https://fastly.jsdelivr.net/gh/doocs/leetcode@main/solution/0400-0499/0422.Valid%20Word%20Square/images/validsq1-grid.jpg" style="width: 333px; height: 333px;" />
2919
<pre>
30-
<strong>输入:</strong>
31-
[
32-
"abcd",
33-
"bnrt",
34-
"crmy",
35-
"dtye"
36-
]
37-
38-
<strong>输出:</strong>
39-
true
40-
41-
<strong>解释:</strong>
42-
第 1 行和第 1 列都是 "abcd"。
43-
第 2 行和第 2 列都是 "bnrt"。
44-
第 3 行和第 3 列都是 "crmy"。
45-
第 4 行和第 4 列都是 "dtye"。
46-
47-
因此,这是一个有效的单词方块。
20+
<strong>输入:</strong> words = ["abcd","bnrt","crmy","dtye"]
21+
<strong>输出:</strong> true
22+
<strong>解释:</strong>
23+
第 1 行和第 1 列都读作 "abcd"。
24+
第 2 行和第 2 列都读作 "bnrt"。
25+
第 3 行和第 3 列都读作 "crmy"。
26+
第 4 行和第 4 列都读作 "dtye"。
27+
因此,它构成了一个有效的单词方块。
4828
</pre>
4929

50-
<p>&nbsp;</p>
51-
52-
<p><strong>示例 2:</strong></p>
53-
54-
<p><strong><img alt="" src="https://fastly.jsdelivr.net/gh/doocs/leetcode@main/solution/0400-0499/0422.Valid%20Word%20Square/images/1713840732-EvBDzU-image.png" style="width: 333px; height: 333px;" /></strong></p>
55-
30+
<p><strong class="example">示例 2:</strong></p>
31+
<img alt="" src="https://fastly.jsdelivr.net/gh/doocs/leetcode@main/solution/0400-0499/0422.Valid%20Word%20Square/images/validsq2-grid.jpg" style="width: 333px; height: 333px;" />
5632
<pre>
57-
<strong>输入:</strong>
58-
[
59-
"abcd",
60-
"bnrt",
61-
"crm",
62-
"dt"
63-
]
64-
65-
<strong>输出:</strong>
66-
true
67-
68-
<strong>解释:</strong>
69-
第 1 行和第 1 列都是 "abcd"。
70-
第 2 行和第 2 列都是 "bnrt"。
71-
第 3 行和第 3 列都是 "crm"。
72-
第 4 行和第 4 列都是 "dt"。
73-
74-
因此,这是一个有效的单词方块。
33+
<strong>输入:</strong> words = ["abcd","bnrt","crm","dt"]
34+
<strong>输出:</strong> true
35+
<strong>解释:</strong>
36+
第 1 行和第 1 列都读作 "abcd"。
37+
第 2 行和第 2 列都读作 "bnrt"。
38+
第 3 行和第 3 列都读作 "crm"。
39+
第 4 行和第 4 列都读作 "dt"。
40+
因此,它构成了一个有效的单词方块。
7541
</pre>
7642

77-
<p>&nbsp;</p>
78-
79-
<p><strong>示例 3:</strong></p>
80-
81-
<p><strong><img alt="" src="https://fastly.jsdelivr.net/gh/doocs/leetcode@main/solution/0400-0499/0422.Valid%20Word%20Square/images/1713840738-tdOYTB-image.png" style="width: 333px; height: 333px;" /></strong></p>
82-
43+
<p><strong class="example">示例 3:</strong></p>
44+
<img alt="" src="https://fastly.jsdelivr.net/gh/doocs/leetcode@main/solution/0400-0499/0422.Valid%20Word%20Square/images/validsq3-grid.jpg" style="width: 333px; height: 333px;" />
8345
<pre>
84-
<strong>输入:</strong>
85-
[
86-
"ball",
87-
"area",
88-
"read",
89-
"lady"
90-
]
91-
92-
<strong>输出:</strong>
93-
false
94-
95-
<strong>解释:</strong>
96-
第 3 行是 "read" ,然而第 3 列是 "lead"。
97-
98-
因此,这 <strong>不是</strong> 一个有效的单词方块。
46+
<strong>输入:</strong> words = ["ball","area","read","lady"]
47+
<strong>输出:</strong> false
48+
<strong>解释:</strong>
49+
第 3 行读作 "read" 而第 3 列读作 "lead"。
50+
因此,它不构成一个有效的单词方块。
9951
</pre>
10052

10153
<p>&nbsp;</p>
10254

55+
<p><strong>提示:</strong></p>
56+
57+
<ul>
58+
<li><code>1 &lt;= words.length &lt;= 500</code></li>
59+
<li><code>1 &lt;= words[i].length &lt;= 500</code></li>
60+
<li><code>words[i]</code> 仅由小写英文字母组成。</li>
61+
</ul>
62+
10363
## 解法
10464

10565
### 方法一:遍历检查
Binary file not shown.
Binary file not shown.
Binary file not shown.

0 commit comments

Comments
 (0)