Skip to content

Commit 85e8227

Browse files
committed
add more solutions
1 parent 6c7d858 commit 85e8227

File tree

8 files changed

+124
-0
lines changed

8 files changed

+124
-0
lines changed

Binary Tree Maximum Path Sum.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Solution:
2+
maxSum = -2147483648
3+
def maxPathSum(self, root):
4+
self.maxPathRecur(root)
5+
return self.maxSum
6+
7+
def maxPathRecur(self, root):
8+
if root == None:
9+
return 0
10+
left = max(0, self.maxPathRecur(root.left))
11+
right = max(0, self.maxPathRecur(root.right))
12+
self.maxSum = max(self.maxSum, left + right + root.val)
13+
return root.val + max(left, right)

Clone Graph.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
class Solution:
2+
def cloneGraph(self, node):
3+
if node == None:
4+
return None
5+
start = UndirectedGraphNode(node.label)
6+
map, current = {node: start}, [node]
7+
while len(current) > 0:
8+
next = []
9+
for x in current:
10+
for neighbor in x.neighbors:
11+
if neighbor not in map:
12+
neighbor_copy = UndirectedGraphNode(neighbor.label)
13+
next.append(neighbor)
14+
map[x].neighbors.append(neighbor_copy)
15+
map[neighbor] = neighbor_copy
16+
else:
17+
map[x].neighbors.append(map[neighbor])
18+
current = next
19+
return start

Insert Interval.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
class Solution:
2+
def insert(self, intervals, newInterval):
3+
return self.merge(intervals + [newInterval])
4+
5+
def merge(self, intervals):
6+
if len(intervals) == 0:
7+
return intervals
8+
intervals.sort(key = lambda x: x.start)
9+
result = [intervals[0]]
10+
for i in range(1, len(intervals)):
11+
current, prev = intervals[i], result[-1]
12+
if current.start <= prev.end:
13+
prev.end = max(prev.end, current.end)
14+
else:
15+
result.append(current)
16+
return result

Merge Intervals.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Solution:
2+
def merge(self, intervals):
3+
if len(intervals) == 0:
4+
return intervals
5+
intervals.sort(key = lambda x: x.start)
6+
result = [intervals[0]]
7+
for i in range(1, len(intervals)):
8+
current, prev = intervals[i], result[-1]
9+
if current.start <= prev.end:
10+
prev.end = max(prev.end, current.end)
11+
else:
12+
result.append(current)
13+
return result

Restore IP Addresses.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Solution:
2+
def restoreIpAddresses(self, s):
3+
result = []
4+
self.restoreIpAddressesRecur(result, s, "", 0)
5+
return result
6+
7+
def restoreIpAddressesRecur(self, result, s, current, dots):
8+
# pruning to improve performance
9+
if (4 - dots) * 3 < len(s):
10+
return
11+
if dots == 3:
12+
if self.isValid(s):
13+
result.append(current + s)
14+
else:
15+
for i in range(3):
16+
if len(s) > i and self.isValid(s[:i + 1]):
17+
self.restoreIpAddressesRecur(result, s[i + 1:], current + s[:i + 1] + '.', dots + 1)
18+
19+
def isValid(self, s):
20+
if len(s) == 0 or (s[0] == "0" and s != "0"):
21+
return False
22+
return int(s) < 256

Simplify Path.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
class Solution:
2+
def simplifyPath(self, path):
3+
stack, tokens = [], path.split('/')
4+
for token in tokens:
5+
if token == "..":
6+
if len(stack) > 0:
7+
stack.pop()
8+
elif token != "" and token != ".":
9+
stack.append(token)
10+
return "/" + reduce(lambda acc, x: acc + x + "/", stack, "")[:-1]

Word Search.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class Solution:
2+
def exist(self, board, word):
3+
visited = [[0 for y in range(len(board[0]))] for x in range(len(board))]
4+
for i in range(len(board)):
5+
for j in range(len(board[0])):
6+
if self.existRecur(board, word, visited, i, j) == True:
7+
return True
8+
return False
9+
10+
def existRecur(self, board, word, visited, i, j):
11+
if len(word) == 0:
12+
return True
13+
if i >= len(board) or j >= len(board[0]) or i < 0 or j < 0 or visited[i][j] == 1 or board[i][j] != word[0]:
14+
return False
15+
visited[i][j] = 1
16+
found = self.existRecur(board, word[1:], visited, i + 1, j) or self.existRecur(board, word[1:], visited, i - 1, j) or self.existRecur(board, word[1:], visited, i, j + 1) or self.existRecur(board, word[1:], visited, i, j - 1)
17+
visited[i][j] = 0
18+
return found

ZigZag Conversion.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Solution:
2+
def convert(self, s, nRows):
3+
step, zigzag = 2 * nRows - 2, ""
4+
if s == None or len(s) == 0 or nRows <= 0:
5+
return ""
6+
if nRows == 1:
7+
return s
8+
for i in range(nRows):
9+
for j in range(i, len(s), step):
10+
zigzag += s[j]
11+
if i > 0 and i < nRows - 1 and j + step - 2 * i < len(s):
12+
zigzag += s[j + step - 2 * i]
13+
return zigzag

0 commit comments

Comments
 (0)