Skip to content

Commit a8e9684

Browse files
authored
Merge branch 'doocs:main' into main
2 parents ecde427 + 66b4da5 commit a8e9684

File tree

141 files changed

+6267
-1850
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

141 files changed

+6267
-1850
lines changed

lcof2/剑指 Offer II 054. 所有大于等于节点的值之和/README.md

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,51 @@ var convertBST = function (root) {
317317
};
318318
```
319319

320+
#### Swift
321+
322+
```swift
323+
/* class TreeNode {
324+
* var val: Int
325+
* var left: TreeNode?
326+
* var right: TreeNode?
327+
* init() {
328+
* self.val = 0
329+
* self.left = nil
330+
* self.right = nil
331+
* }
332+
* init(_ val: Int) {
333+
* self.val = val
334+
* self.left = nil
335+
* self.right = nil
336+
* }
337+
* init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) {
338+
* self.val = val
339+
* self.left = left
340+
* self.right = right
341+
* }
342+
* }
343+
*/
344+
345+
class Solution {
346+
private var s = 0
347+
348+
func convertBST(_ root: TreeNode?) -> TreeNode? {
349+
dfs(root)
350+
return root
351+
}
352+
353+
private func dfs(_ root: TreeNode?) {
354+
guard let node = root else {
355+
return
356+
}
357+
dfs(node.right)
358+
s += node.val
359+
node.val = s
360+
dfs(node.left)
361+
}
362+
}
363+
```
364+
320365
<!-- tabs:end -->
321366

322367
<!-- solution:end -->
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/* class TreeNode {
2+
* var val: Int
3+
* var left: TreeNode?
4+
* var right: TreeNode?
5+
* init() {
6+
* self.val = 0
7+
* self.left = nil
8+
* self.right = nil
9+
* }
10+
* init(_ val: Int) {
11+
* self.val = val
12+
* self.left = nil
13+
* self.right = nil
14+
* }
15+
* init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) {
16+
* self.val = val
17+
* self.left = left
18+
* self.right = right
19+
* }
20+
* }
21+
*/
22+
23+
class Solution {
24+
private var s = 0
25+
26+
func convertBST(_ root: TreeNode?) -> TreeNode? {
27+
dfs(root)
28+
return root
29+
}
30+
31+
private func dfs(_ root: TreeNode?) {
32+
guard let node = root else {
33+
return
34+
}
35+
dfs(node.right)
36+
s += node.val
37+
node.val = s
38+
dfs(node.left)
39+
}
40+
}

lcof2/剑指 Offer II 055. 二叉搜索树迭代器/README.md

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -431,6 +431,60 @@ BSTIterator.prototype.hasNext = function () {
431431
*/
432432
```
433433

434+
#### Swift
435+
436+
```swift
437+
/* class TreeNode {
438+
* var val: Int
439+
* var left: TreeNode?
440+
* var right: TreeNode?
441+
* init() {
442+
* self.val = 0
443+
* self.left = nil
444+
* self.right = nil
445+
* }
446+
* init(_ val: Int) {
447+
* self.val = val
448+
* self.left = nil
449+
* self.right = nil
450+
* }
451+
* init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) {
452+
* self.val = val
453+
* self.left = left
454+
* self.right = right
455+
* }
456+
* }
457+
*/
458+
459+
class BSTIterator {
460+
private var cur = 0
461+
private var vals = [Int]()
462+
463+
init(_ root: TreeNode?) {
464+
inorder(root)
465+
}
466+
467+
func next() -> Int {
468+
let value = vals[cur]
469+
cur += 1
470+
return value
471+
}
472+
473+
func hasNext() -> Bool {
474+
return cur < vals.count
475+
}
476+
477+
private func inorder(_ root: TreeNode?) {
478+
guard let node = root else {
479+
return
480+
}
481+
inorder(node.left)
482+
vals.append(node.val)
483+
inorder(node.right)
484+
}
485+
}
486+
```
487+
434488
<!-- tabs:end -->
435489

436490
<!-- solution:end -->
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/* class TreeNode {
2+
* var val: Int
3+
* var left: TreeNode?
4+
* var right: TreeNode?
5+
* init() {
6+
* self.val = 0
7+
* self.left = nil
8+
* self.right = nil
9+
* }
10+
* init(_ val: Int) {
11+
* self.val = val
12+
* self.left = nil
13+
* self.right = nil
14+
* }
15+
* init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) {
16+
* self.val = val
17+
* self.left = left
18+
* self.right = right
19+
* }
20+
* }
21+
*/
22+
23+
class BSTIterator {
24+
private var cur = 0
25+
private var vals = [Int]()
26+
27+
init(_ root: TreeNode?) {
28+
inorder(root)
29+
}
30+
31+
func next() -> Int {
32+
let value = vals[cur]
33+
cur += 1
34+
return value
35+
}
36+
37+
func hasNext() -> Bool {
38+
return cur < vals.count
39+
}
40+
41+
private func inorder(_ root: TreeNode?) {
42+
guard let node = root else {
43+
return
44+
}
45+
inorder(node.left)
46+
vals.append(node.val)
47+
inorder(node.right)
48+
}
49+
}

lcof2/剑指 Offer II 056. 二叉搜索树中两个节点之和/README.md

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,52 @@ function find(root: TreeNode | null, k: number, nodes: Set<number>): boolean {
208208
}
209209
```
210210

211+
#### Swift
212+
213+
```swift
214+
/* class TreeNode {
215+
* var val: Int
216+
* var left: TreeNode?
217+
* var right: TreeNode?
218+
* init() {
219+
* self.val = 0
220+
* self.left = nil
221+
* self.right = nil
222+
* }
223+
* init(_ val: Int) {
224+
* self.val = val
225+
* self.left = nil
226+
* self.right = nil
227+
* }
228+
* init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) {
229+
* self.val = val
230+
* self.left = left
231+
* self.right = right
232+
* }
233+
* }
234+
*/
235+
236+
class Solution {
237+
private var nodes: Set<Int> = []
238+
239+
func findTarget(_ root: TreeNode?, _ k: Int) -> Bool {
240+
nodes = []
241+
return find(root, k)
242+
}
243+
244+
private func find(_ root: TreeNode?, _ k: Int) -> Bool {
245+
guard let node = root else {
246+
return false
247+
}
248+
if nodes.contains(k - node.val) {
249+
return true
250+
}
251+
nodes.insert(node.val)
252+
return find(node.left, k) || find(node.right, k)
253+
}
254+
}
255+
```
256+
211257
<!-- tabs:end -->
212258

213259
<!-- solution:end -->
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/* class TreeNode {
2+
* var val: Int
3+
* var left: TreeNode?
4+
* var right: TreeNode?
5+
* init() {
6+
* self.val = 0
7+
* self.left = nil
8+
* self.right = nil
9+
* }
10+
* init(_ val: Int) {
11+
* self.val = val
12+
* self.left = nil
13+
* self.right = nil
14+
* }
15+
* init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) {
16+
* self.val = val
17+
* self.left = left
18+
* self.right = right
19+
* }
20+
* }
21+
*/
22+
23+
class Solution {
24+
private var nodes: Set<Int> = []
25+
26+
func findTarget(_ root: TreeNode?, _ k: Int) -> Bool {
27+
nodes = []
28+
return find(root, k)
29+
}
30+
31+
private func find(_ root: TreeNode?, _ k: Int) -> Bool {
32+
guard let node = root else {
33+
return false
34+
}
35+
if nodes.contains(k - node.val) {
36+
return true
37+
}
38+
nodes.insert(node.val)
39+
return find(node.left, k) || find(node.right, k)
40+
}
41+
}

solution/0100-0199/0130.Surrounded Regions/README.md

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,35 +20,46 @@ tags:
2020

2121
<!-- description:start -->
2222

23-
给你一个 <code>m x n</code> 的矩阵 <code>board</code> ,由若干字符 <code>'X'</code> 和 <code>'O'</code> ,找到所有被 <code>'X'</code> 围绕的区域,并将这些区域里所有的  <code>'O'</code> 用 <code>'X'</code> 填充。
23+
<p>给你一个 <code>m x n</code> 的矩阵 <code>board</code> ,由若干字符 <code>'X'</code> 和 <code>'O'</code>&nbsp;组成,<strong>捕获</strong> 所有 <strong>被围绕的区域</strong>:</p>
24+
25+
<ul>
26+
<li><strong>连接:</strong>一个单元格与水平或垂直方向上相邻的单元格连接。</li>
27+
<li><strong>区域:连接所有&nbsp;</strong><code>'0'</code>&nbsp;的单元格来形成一个区域。</li>
28+
<li><strong>围绕:</strong>如果您可以用&nbsp;<code>'X'</code>&nbsp;单元格 <strong>连接这个区域</strong>,并且区域中没有任何单元格位于&nbsp;<code>board</code> 边缘,则该区域被 <code>'X'</code>&nbsp;单元格围绕。</li>
29+
</ul>
2430

2531
<div class="original__bRMd">
2632
<div>
27-
<p> </p>
33+
<p>&nbsp;</p>
2834

29-
<p><strong>示例 1:</strong></p>
30-
<img alt="" src="https://fastly.jsdelivr.net/gh/doocs/leetcode@main/solution/0100-0199/0130.Surrounded%20Regions/images/xogrid.jpg" style="width: 550px; height: 237px;" />
31-
<pre>
32-
<strong>输入:</strong>board = [["X","X","X","X"],["X","O","O","X"],["X","X","O","X"],["X","O","X","X"]]
33-
<strong>输出:</strong>[["X","X","X","X"],["X","X","X","X"],["X","X","X","X"],["X","O","X","X"]]
34-
<strong>解释:</strong>被围绕的区间不会存在于边界上,换句话说,任何边界上的 <code>'O'</code> 都不会被填充为 <code>'X'</code>。 任何不在边界上,或不与边界上的 <code>'O'</code> 相连的 <code>'O'</code> 最终都会被填充为 <code>'X'</code>。如果两个元素在水平或垂直方向相邻,则称它们是“相连”的。
35-
</pre>
35+
<p><strong class="example">示例 1:</strong></p>
3636

37-
<p><strong>示例 2:</strong></p>
37+
<div class="example-block">
38+
<p><strong>输入:</strong><span class="example-io">board = [["X","X","X","X"],["X","O","O","X"],["X","X","O","X"],["X","O","X","X"]]</span></p>
3839

39-
<pre>
40-
<strong>输入:</strong>board = [["X"]]
41-
<strong>输出:</strong>[["X"]]
42-
</pre>
40+
<p><b>输出:</b><span class="example-io">[["X","X","X","X"],["X","X","X","X"],["X","X","X","X"],["X","O","X","X"]]</span></p>
41+
42+
<p><strong>解释:</strong></p>
43+
<img alt="" src="https://fastly.jsdelivr.net/gh/doocs/leetcode@main/solution/0100-0199/0130.Surrounded%20Regions/images/1718167191-XNjUTG-image.png" style="width: 367px; height: 158px;" />
44+
<p>在上图中,底部的区域没有被捕获,因为它在 board 的边缘并且不能被围绕。</p>
45+
</div>
46+
47+
<p><strong class="example">示例 2:</strong></p>
48+
49+
<div class="example-block">
50+
<p><strong>输入:</strong><span class="example-io">board = [["X"]]</span></p>
51+
52+
<p><strong>输出:</strong><span class="example-io">[["X"]]</span></p>
53+
</div>
4354

44-
<p> </p>
55+
<p>&nbsp;</p>
4556

4657
<p><strong>提示:</strong></p>
4758

4859
<ul>
4960
<li><code>m == board.length</code></li>
5061
<li><code>n == board[i].length</code></li>
51-
<li><code>1 <= m, n <= 200</code></li>
62+
<li><code>1 &lt;= m, n &lt;= 200</code></li>
5263
<li><code>board[i][j]</code> 为 <code>'X'</code> 或 <code>'O'</code></li>
5364
</ul>
5465
</div>

0 commit comments

Comments
 (0)