File tree Expand file tree Collapse file tree 6 files changed +183
-0
lines changed
binary-tree-level-order-traversal
kth-smallest-element-in-a-bst
longest-palindromic-substring Expand file tree Collapse file tree 6 files changed +183
-0
lines changed Original file line number Diff line number Diff line change 1+ from collections import deque
2+ # 102. Binary Tree Level Order Traversal
3+ class Solution :
4+ def levelOrder (self , root : Optional [TreeNode ]) -> List [List [int ]]:
5+ # 1. Edge Case: Empty Tree
6+ if not root :
7+ return []
8+
9+ result = []
10+ queue = deque ([root ])
11+
12+ while queue :
13+ # 2. Capture the number of nodes at the current level
14+ level_size = len (queue )
15+ current_level_nodes = []
16+
17+ for _ in range (level_size ):
18+ current_node = queue .popleft ()
19+ current_level_nodes .append (current_node .val )
20+
21+ # 3. Add children to the queue for the NEXT level
22+ if current_node .left :
23+ queue .append (current_node .left )
24+ if current_node .right :
25+ queue .append (current_node .right )
26+
27+ # Add the finished level to our result
28+ result .append (current_level_nodes )
29+
30+ return result
Original file line number Diff line number Diff line change 1+ # Week1
2+ # 198. House Robber
3+ # Tabulation
4+ # Dynamic Programming
5+
6+
7+ # two options: either rober or not
8+
9+ class Solution :
10+ def rob (self , nums : List [int ]) -> int :
11+ # Top Down DP
12+
13+ n = len (nums )
14+
15+ if n == 1 :
16+ return nums [0 ]
17+ if n == 2 :
18+ return max (nums [0 ], nums [1 ])
19+ memo = {0 : nums [0 ], 1 : max (nums [0 ], nums [1 ])}
20+ def helper (i ):
21+
22+ if i in memo :
23+ return memo [i ]
24+ else :
25+ memo [i ]= max (nums [i ] + helper (i - 2 ), helper (i - 1 ))
26+ return memo [i ]
27+
28+ return helper (n - 1 )
Original file line number Diff line number Diff line change 1+ # Definition for a binary tree node.
2+ # class TreeNode:
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 :
8+ # Time Complexity O(N)
9+ def kthSmallest (self , root : Optional [TreeNode ], k : int ) -> int :
10+ ans = []
11+ final = 0
12+ def dfs (node ):
13+ nonlocal final
14+ if not node :
15+ return
16+ dfs (node .left )
17+ ans .append (node .val )
18+ if len (ans ) == k :
19+ final = node .val
20+ if len (ans ) < k :
21+ dfs (node .right )
22+ dfs (root )
23+ return final
Original file line number Diff line number Diff line change 1+ # 5. Longest Palindromic Substring
2+ # https://leetcode.com/problems/longest-palindromic-substring/
3+
4+
5+ class Solution :
6+ def longestPalindrome (self , s : str ) -> str :
7+ #Expand Around Center
8+ res = ""
9+ resLen = 0
10+
11+ for i in range (len (s )):
12+ # odd length
13+ l , r = i , i
14+ while l >= 0 and r < len (s ) and s [l ] == s [r ]:
15+ if (r - l + 1 ) > resLen :
16+ res = s [l :r + 1 ]
17+ resLen = r - l + 1
18+ l -= 1
19+ r += 1
20+
21+ # even length
22+ l , r = i , i + 1
23+ while l >= 0 and r < len (s ) and s [l ] == s [r ]:
24+ if (r - l + 1 ) > resLen :
25+ res = s [l :r + 1 ]
26+ resLen = r - l + 1
27+ l -= 1
28+ r += 1
29+
30+ return res
Original file line number Diff line number Diff line change 1+ # https://leetcode.com/problems/rotate-image/
2+ # 48. Rotate Image
3+ class Solution :
4+ def rotate (self , matrix : List [List [int ]]) -> None :
5+ """
6+ Do not return anything, modify matrix in-place instead.
7+ """
8+ # First Try - Thought process:
9+ # group values by column index (j) to rebuild rows
10+ # Brute force: create an extra 2D matrix and then copy it back into matrix
11+ # Needs optimization: this approach uses extra space
12+ matrix_result = [[] for _ in range (len (matrix ))]
13+ for i in reversed (matrix ):
14+ for j , value in enumerate (i ):
15+ matrix_result [j ].append (value )
16+ for r in range (len (matrix )):
17+ matrix [r ] = matrix_result [r ]
18+
19+ # Youtube Solution - Transpose Operation + hr
20+ # Swap i, js
21+ n = len (matrix )
22+ for i in range (n ):
23+ for j in range (i + 1 , n ):
24+ matrix [i ][j ], matrix [j ][i ] = matrix [j ][i ], matrix [i ][j ]
25+
26+ # Reflection
27+ for i in range (n ):
28+ for j in range (n // 2 ):
29+ matrix [i ][j ], matrix [i ][n - j - 1 ] = matrix [i ][n - j - 1 ], matrix [i ][j ]
Original file line number Diff line number Diff line change 1+ from collections import deque
2+ from typing import Optional
3+
4+ # class TreeNode:
5+ # def __init__(self, val=0, left=None, right=None):
6+ # self.val = val
7+ # self.left = left
8+ # self.right = right
9+ # 572. Subtree of Another Tree
10+ # https://leetcode.com/problems/subtree-of-another-tree/description/
11+ class Solution :
12+ def isSubtree (self , root : Optional [TreeNode ], subRoot : Optional [TreeNode ]) -> bool :
13+ # Use BFS => Queue
14+ # Edge cases
15+ if subRoot is None :
16+ return True
17+ if root is None :
18+ return False
19+
20+ def helper (node : Optional [TreeNode ], subNode : Optional [TreeNode ]) -> bool :
21+ if node is None and subNode is None :
22+ return True
23+ if node is None or subNode is None :
24+ return False
25+ if node .val != subNode .val :
26+ return False
27+ return helper (node .left , subNode .left ) and helper (node .right , subNode .right )
28+
29+ q = deque ([root ])
30+
31+ while q :
32+ curr = q .popleft ()
33+
34+ # Only attempt full compare when root values match
35+ if curr .val == subRoot .val and helper (curr , subRoot ):
36+ return True
37+
38+ if curr .left :
39+ q .append (curr .left )
40+ if curr .right :
41+ q .append (curr .right )
42+
43+ return False
You can’t perform that action at this time.
0 commit comments