Skip to content

Commit a66faf5

Browse files
committed
区域包围问题(类似于岛屿问题, dfs)
1 parent f4ff4e7 commit a66faf5

File tree

2 files changed

+63
-12
lines changed

2 files changed

+63
-12
lines changed

DepthFirstSearch/129_SumRootToLeafNumbers.py

+6-12
Original file line numberDiff line numberDiff line change
@@ -38,20 +38,14 @@ def sumNumbers(self, root):
3838
:type root: TreeNode
3939
:rtype: int
4040
"""
41+
return self.dfs(root, 0)
42+
43+
def dfs(self, root, sub):
4144
if not root:
4245
return 0
4346

44-
sub = 0
45-
total = []
46-
self.dfs(root, sub, total)
47-
48-
return sum(total)
49-
50-
def dfs(self, root, sub, total):
5147
sub = 10 * sub + root.val
5248
if not root.left and not root.right:
53-
total.append(sub)
54-
if root.left:
55-
self.dfs(root.left, sub, total)
56-
if root.right:
57-
self.dfs(root.right, sub, total)
49+
return sub
50+
51+
return self.dfs(root.left, sub) + self.dfs(root.right, sub)
+57
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
# coding: utf8
2+
3+
4+
"""
5+
题目链接: https://leetcode.com/problems/surrounded-regions/description.
6+
题目描述:
7+
8+
Given a 2D board containing 'X' and 'O' (the letter O), capture all regions surrounded by 'X'.
9+
10+
A region is captured by flipping all 'O's into 'X's in that surrounded region.
11+
12+
For example,
13+
X X X X
14+
X O O X
15+
X X O X
16+
X O X X
17+
After running your function, the board should be:
18+
19+
X X X X
20+
X X X X
21+
X X X X
22+
X O X X
23+
24+
"""
25+
26+
27+
class Solution(object):
28+
def solve(self, board):
29+
"""
30+
:type board: List[List[str]]
31+
:rtype: void Do not return anything, modify board in-place instead.
32+
"""
33+
if not any(board):
34+
return
35+
36+
rows, columns = len(board), len(board[0])
37+
for i in range(rows):
38+
for j in range(columns):
39+
if i == 0 or i == rows - 1 or j == 0 or j == columns - 1 and board[i][j] == 'O':
40+
self.dfs(board, rows, columns, i, j)
41+
42+
for i in range(rows):
43+
for j in range(columns):
44+
if board[i][j] == 'O':
45+
board[i][j] = 'X'
46+
elif board[i][j] == '$':
47+
board[i][j] = 'O'
48+
49+
def dfs(self, board, rows, columns, i, j):
50+
if i < 0 or i >= rows or j < 0 or j >= columns or board[i][j] != 'O':
51+
return
52+
53+
board[i][j] = '$'
54+
self.dfs(board, rows, columns, i - 1, j)
55+
self.dfs(board, rows, columns, i, j + 1)
56+
self.dfs(board, rows, columns, i + 1, j)
57+
self.dfs(board, rows, columns, i, j - 1)

0 commit comments

Comments
 (0)