Skip to content

Commit f7f7d43

Browse files
committed
added problems
1 parent d2d12bf commit f7f7d43

File tree

8 files changed

+220
-0
lines changed

8 files changed

+220
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
class Solution:
2+
def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode:
3+
n = len(inorder)
4+
if n == 0: return None
5+
6+
self.inorder = inorder
7+
self.preorder = preorder
8+
self.ino_map = {val: idx for idx, val in enumerate(inorder)}
9+
self.p_idx = 0
10+
11+
return self.buildTreeRec(0, n - 1)
12+
13+
def buildTreeRec(self, start, end):
14+
if start > end: return None
15+
16+
root_val = self.preorder[self.p_idx]
17+
self.p_idx += 1
18+
root = TreeNode(root_val)
19+
ino_idx = self.ino_map[root_val]
20+
21+
root.left = self.buildTreeRec(start, ino_idx - 1)
22+
root.right = self.buildTreeRec(ino_idx + 1, end)
23+
return root
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
from collections import deque
2+
3+
class Solution:
4+
def connect(self, root: 'Node') -> 'Node':
5+
if not root: return root
6+
7+
q = deque()
8+
q.append(root)
9+
10+
while q:
11+
n = len(q)
12+
level = []
13+
14+
for _ in range(n):
15+
node = q.popleft()
16+
level.append(node)
17+
18+
if node.left:
19+
q.append(node.left)
20+
if node.right:
21+
q.append(node.right)
22+
23+
for i in range(len(level) - 1):
24+
level[i].next = level[i + 1]
25+
26+
return root
27+
28+
class Solution2:
29+
def connect(self, root: 'Node') -> 'Node':
30+
if not root:
31+
return root
32+
33+
# Start with the root node. There are no next pointers
34+
# that need to be set up on the first level
35+
leftmost = root
36+
37+
# Once we reach the final level, we are done
38+
while leftmost.left:
39+
40+
# Iterate the "linked list" starting from the head
41+
# node and using the next pointers, establish the
42+
# corresponding links for the next level
43+
head = leftmost
44+
while head:
45+
46+
# CONNECTION 1
47+
head.left.next = head.right
48+
49+
# CONNECTION 2
50+
if head.next:
51+
head.right.next = head.next.left
52+
53+
# Progress along the list (nodes on the current level)
54+
head = head.next
55+
56+
# Move onto the next level
57+
leftmost = leftmost.left
58+
59+
return root
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
class Solution:
2+
def kthSmallest(self, root: TreeNode, k: int) -> int:
3+
self.count = 0
4+
self.res = 0
5+
self.inorder(root, k)
6+
return self.res
7+
8+
def inorder(self, node, k):
9+
if not node: return
10+
self.inorder(node.left, k)
11+
12+
self.count += 1
13+
if self.count == k:
14+
self.res = node.val
15+
return
16+
17+
self.inorder(node.right, k)
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
class Solution:
2+
def numIslands(self, grid: List[List[str]]) -> int:
3+
if not grid or not grid[0]:
4+
return 0
5+
6+
count = 0
7+
m = len(grid)
8+
n = len(grid[0])
9+
10+
for r in range(m):
11+
for c in range(n):
12+
if grid[r][c] == '1':
13+
self.markGrid(grid, r, c)
14+
count += 1
15+
16+
return count
17+
18+
def markGrid(self, grid, r, c):
19+
grid[r][c] = '2'
20+
m = len(grid)
21+
n = len(grid[0])
22+
23+
if r - 1 >= 0 and grid[r-1][c] == '1':
24+
self.markGrid(grid, r-1, c)
25+
if r + 1 < m and grid[r+1][c] == '1':
26+
self.markGrid(grid, r+1, c)
27+
if c - 1 >= 0 and grid[r][c-1] == '1':
28+
self.markGrid(grid, r, c-1)
29+
if c + 1 < n and grid[r][c+1] == '1':
30+
self.markGrid(grid, r, c+1)
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
class Solution:
2+
def letterCombinations(self, digits: str) -> List[str]:
3+
if len(digits) == 0: return []
4+
5+
self.letters = {
6+
"2": "abc",
7+
"3": "def",
8+
"4": "ghi",
9+
"5": "jkl",
10+
"6": "mno",
11+
"7": "pqrs",
12+
"8": "tuv",
13+
"9": "wxyz"
14+
}
15+
16+
self.digits = digits
17+
self.res = []
18+
self.backtrack(0, [])
19+
return self.res
20+
21+
def backtrack(self, idx, path):
22+
if len(path) == len(self.digits):
23+
self.res.append(''.join(path))
24+
return
25+
26+
letters = self.letters[self.digits[idx]]
27+
for letter in letters:
28+
path.append(letter)
29+
self.backtrack(idx + 1, path)
30+
path.pop()
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
class Solution:
2+
def generateParenthesis(self, n: int) -> List[str]:
3+
res = []
4+
5+
def backtrack(path, left, right):
6+
if len(path) == n * 2:
7+
res.append(path)
8+
return
9+
10+
if left < n:
11+
backtrack(path + '(', left + 1, right)
12+
if left > right:
13+
backtrack(path + ')', left, right + 1)
14+
15+
backtrack('', 0, 0)
16+
return res
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
class Solution:
2+
def permute(self, nums: List[int]) -> List[List[int]]:
3+
self.res = []
4+
self.traverse(nums, [])
5+
return self.res
6+
7+
def traverse(self, nums, path):
8+
if len(nums) == 0:
9+
self.res.append(path)
10+
return
11+
12+
for i in range(len(nums)):
13+
new_nums = nums[:i] + nums[i+1:]
14+
new_path = path + [nums[i]]
15+
self.traverse(new_nums, new_path)
16+
17+
class Solution2:
18+
def permute(self, nums: List[int]) -> List[List[int]]:
19+
self.visited = set()
20+
self.res = []
21+
self.backtrack(nums, [])
22+
return self.res
23+
24+
def backtrack(self, nums, path):
25+
if len(nums) == len(path):
26+
self.res.append(path.copy())
27+
return
28+
29+
for num in nums:
30+
if num not in self.visited:
31+
self.visited.add(num)
32+
self.backtrack(nums, path + [num])
33+
self.visited.remove(num)
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
class Solution:
2+
def subsets(self, nums: List[int]) -> List[List[int]]:
3+
self.res = []
4+
self.backtrack(0, [], nums)
5+
return self.res
6+
7+
def backtrack(self, start, path, nums):
8+
self.res.append(path.copy())
9+
for i in range(start, len(nums)):
10+
path.append(nums[i])
11+
self.backtrack(i + 1, path, nums)
12+
path.pop()

0 commit comments

Comments
 (0)