File tree 5 files changed +131
-59
lines changed
5 files changed +131
-59
lines changed Original file line number Diff line number Diff line change @@ -4,15 +4,11 @@ def rob(self, nums):
4
4
:type nums: List[int]
5
5
:rtype: int
6
6
"""
7
- # return 0
8
- if not nums :
7
+ if len (nums ) == 0 :
9
8
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
Original file line number Diff line number Diff line change 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 ]:
8
5
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
+
12
9
dx = [1 , - 1 , 0 , 0 ]
13
10
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 )
24
11
12
+ res = 0
25
13
for i in range (m ):
26
14
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"
28
17
res += 1
29
- visited [i ][j ] = 1
30
- dfs (i , j )
31
- # print visited
32
18
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
+
33
31
return res
Original file line number Diff line number Diff line change 1
- class Solution ( object ) :
2
- def wallsAndGates (self , rooms ) :
1
+ class Solution :
2
+ def wallsAndGates (self , rooms : List [ List [ int ]]) -> None :
3
3
"""
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.
6
5
"""
7
6
from collections import deque
7
+
8
8
if not rooms or not rooms [0 ]:
9
9
return rooms
10
- m , n = len (rooms ), len (rooms [0 ])
11
- dx = [1 , - 1 , 0 , 0 ]
12
- dy = [0 , 0 , 1 , - 1 ]
13
10
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)
27
14
for i in range (m ):
28
15
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 number Diff line number Diff line change
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 number Diff line number Diff line change
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
+
You can’t perform that action at this time.
0 commit comments