Skip to content

Commit 356ba7d

Browse files
committed
2020-10-15
1 parent d136bd3 commit 356ba7d

File tree

5 files changed

+131
-59
lines changed

5 files changed

+131
-59
lines changed

0198.打家劫舍/0198-打家劫舍.py

+7-11
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,11 @@ def rob(self, nums):
44
:type nums: List[int]
55
:rtype: int
66
"""
7-
# return 0
8-
if not nums:
7+
if len(nums) == 0:
98
return 0
10-
dp = [0 for _ in nums]
11-
dp[0] = nums[0]
12-
for i in range(1, len(nums)):
13-
if i == 1:
14-
dp[i] = max(dp[0], nums[i])
15-
else:
16-
dp[i] = max(dp[i - 2] + nums[i], dp[i - 1])
17-
return dp[-1]
18-
9+
if len(nums) <= 2:
10+
return max(nums)
11+
nums[1] = max(nums[0], nums[1])
12+
for i in range(2, len(nums)):
13+
nums[i] = max(nums[i - 2] + nums[i], nums[i - 1])
14+
return max(nums) if nums else 0
+22-24
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,31 @@
1-
class Solution(object):
2-
def numIslands(self, M):
3-
"""
4-
:type grid: List[List[str]]
5-
:rtype: int
6-
"""
7-
if not M or not M[0]:
1+
class Solution:
2+
def numIslands(self, grid: List[List[str]]) -> int:
3+
from collections import deque
4+
if not grid or not grid[0]:
85
return 0
9-
m, n = len(M), len(M[0])
10-
visited = [[0 for j in range(n)] for i in range(m)]
11-
# print visited
6+
7+
m, n = len(grid), len(grid[0])
8+
129
dx = [1, -1, 0, 0]
1310
dy = [0, 0, 1, -1]
14-
res = 0
15-
16-
def dfs(x0, y0):
17-
for k in range(4):
18-
x = x0 + dx[k]
19-
y = y0 + dy[k]
20-
# print x, y
21-
if 0<= x < m and 0 <= y < n and M[x][y] == '1' and visited[x][y] ==0:
22-
visited[x][y] = 1
23-
dfs(x, y)
2411

12+
res = 0
2513
for i in range(m):
2614
for j in range(n):
27-
if M[i][j] == '1' and visited[i][j] == 0:
15+
if grid[i][j] == "1":
16+
grid[i][j] = "0"
2817
res += 1
29-
visited[i][j] = 1
30-
dfs(i, j)
31-
# print visited
3218

19+
queue = deque([(i, j)])
20+
21+
while queue:
22+
x0, y0 = queue.popleft()
23+
for k in range(4):
24+
x = x0 + dx[k]
25+
y = y0 + dy[k]
26+
27+
if 0 <= x < m and 0 <= y < n and grid[x][y] == "1":
28+
grid[x][y] = "0"
29+
queue.append((x, y))
30+
3331
return res

0286.墙与门/0286-墙与门.py

+21-24
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,29 @@
1-
class Solution(object):
2-
def wallsAndGates(self, rooms):
1+
class Solution:
2+
def wallsAndGates(self, rooms: List[List[int]]) -> None:
33
"""
4-
:type rooms: List[List[int]]
5-
:rtype: None Do not return anything, modify rooms in-place instead.
4+
Do not return anything, modify rooms in-place instead.
65
"""
76
from collections import deque
7+
88
if not rooms or not rooms[0]:
99
return rooms
10-
m, n = len(rooms), len(rooms[0])
11-
dx = [1, -1, 0, 0]
12-
dy = [0, 0, 1, -1]
1310
INF = 2147483647
14-
queue = deque()
15-
def bfs(queue):
16-
while queue:
17-
pos = queue.popleft()
18-
x0, y0 = pos
19-
20-
for k in range(4):
21-
x = x0 + dx[k]
22-
y = y0 + dy[k]
23-
if 0 <= x < m and 0 <= y < n and rooms[x][y] == INF:
24-
rooms[x][y] = rooms[x0][y0] + 1
25-
queue.append((x, y))
26-
11+
12+
m, n = len(rooms), len(rooms[0])
13+
queue = deque() # (x_pos, y_pos, step from a gate)
2714
for i in range(m):
2815
for j in range(n):
29-
if rooms[i][j] == 0: #ÏÖÔÚ´ÓÿÉÈÃųö·¢
30-
queue.append((i, j))
31-
bfs(queue)
32-
return rooms
16+
if rooms[i][j] == 0:
17+
queue.append((i, j, 0))
18+
19+
dx = [1, -1, 0, 0]
20+
dy = [0, 0, 1, -1]
21+
while queue:
22+
x_pos, y_pos, step = queue.popleft()
23+
for k in range(4):
24+
x = x_pos + dx[k]
25+
y = y_pos + dy[k]
26+
27+
if 0 <= x < m and 0 <= y < n and rooms[x][y] == INF:
28+
rooms[x][y] = step + 1
29+
queue.append((x, y, step + 1))
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# Definition for a binary tree node.
2+
# class TreeNode(object):
3+
# def __init__(self, x):
4+
# self.val = x
5+
# self.left = None
6+
# self.right = None
7+
8+
class Codec:
9+
def serialize(self, root):
10+
"""Encodes a tree to a single string.
11+
12+
:type root: TreeNode
13+
:rtype: str
14+
"""
15+
if not root:
16+
return ""
17+
18+
s = ""
19+
def preorder(node):
20+
if not node:
21+
return "#"
22+
23+
return str(node.val) + "," + preorder(node.left) + "," +preorder(node.right)
24+
s = preorder(root)
25+
return s
26+
27+
def deserialize(self, data):
28+
"""Decodes your encoded data to tree.
29+
30+
:type data: str
31+
:rtype: TreeNode
32+
"""
33+
if not data or data == "#":
34+
return None
35+
queue = deque(data.split(","))
36+
return self.helper(queue)
37+
38+
def helper(self, queue):
39+
cur = queue.popleft()
40+
if cur == "#":
41+
return None
42+
root = TreeNode(cur)
43+
root.left = self.helper(queue)
44+
root.right = self.helper(queue)
45+
46+
return root
47+
48+
# Your Codec object will be instantiated and called as such:
49+
# ser = Codec()
50+
# deser = Codec()
51+
# ans = deser.deserialize(ser.serialize(root))
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# Definition for a binary tree node.
2+
# class TreeNode(object):
3+
# def __init__(self, val=0, left=None, right=None):
4+
# self.val = val
5+
# self.left = left
6+
# self.right = right
7+
class Solution(object):
8+
def findTarget(self, root, k):
9+
"""
10+
:type root: TreeNode
11+
:type k: int
12+
:rtype: bool
13+
"""
14+
values = set()
15+
16+
self.result = False
17+
def inorderTraversal(node):
18+
if not node:
19+
return []
20+
if not self.result:
21+
if k - node.val in values:
22+
self.result = True
23+
return
24+
values.add(node.val)
25+
26+
inorderTraversal(node.left)
27+
inorderTraversal(node.right)
28+
inorderTraversal(root)
29+
return self.result
30+

0 commit comments

Comments
 (0)