diff --git a/climbing-stairs/saysimple.py b/climbing-stairs/saysimple.py new file mode 100644 index 000000000..02c6f57a9 --- /dev/null +++ b/climbing-stairs/saysimple.py @@ -0,0 +1,10 @@ +## TC: O(n), SC:O(1) + +class Solution: + def climbStairs(self, n: int) -> int: + a, b = 1, 1 + + for i in range(n - 1): + a, b = a + b, a + + return a diff --git a/maximum-depth-of-binary-tree/saysimple.py b/maximum-depth-of-binary-tree/saysimple.py new file mode 100644 index 000000000..741cee74a --- /dev/null +++ b/maximum-depth-of-binary-tree/saysimple.py @@ -0,0 +1,11 @@ +# Definition for a binary tree node. +# class TreeNode: +# def __init__(self, val=0, left=None, right=None): +# self.val = val +# self.left = left +# self.right = right +class Solution: + def maxDepth(self, root: Optional[TreeNode]) -> int: + if not root: + return 0 + return 1 + max(self.maxDepth(root.left), self.maxDepth(root.right)) diff --git a/meeting-rooms/saysimple.py b/meeting-rooms/saysimple.py new file mode 100644 index 000000000..14b785863 --- /dev/null +++ b/meeting-rooms/saysimple.py @@ -0,0 +1,16 @@ +# TC: O(n), SC: O(1) +class Solution: + def canAttendMeetings(self, intervals: List[Interval]) -> bool: + if not intervals: + return True + + intervals.sort(key=lambda x: x.start) + + e = intervals[0].end + + for i in range(1, len(intervals)): + if intervals[i].start < e: + return False + e = intervals[i].end + + return True diff --git a/same-tree/saysimple.py b/same-tree/saysimple.py new file mode 100644 index 000000000..c95fe9ff9 --- /dev/null +++ b/same-tree/saysimple.py @@ -0,0 +1,27 @@ +# TC: O(n), SC:O(n) +# Definition for a binary tree node. +# class TreeNode: +# def __init__(self, val=0, left=None, right=None): +# self.val = val +# self.left = left +# self.right = right +class Solution: + t = [] + def pre_order(self, node: TreeNode): + if node is None: + self.t.append(None) + return + + self.t.append(node.val) + self.pre_order(node.left) + self.pre_order(node.right) + + def isSameTree(self, p: Optional[TreeNode], q: Optional[TreeNode]) -> bool: + self.t = [] + self.pre_order(p) + a = self.t[:] + self.t = [] + self.pre_order(q) + b = self.t[:] + + return a == b diff --git a/subtree-of-another-tree/saysimple.py b/subtree-of-another-tree/saysimple.py new file mode 100644 index 000000000..e81ed7add --- /dev/null +++ b/subtree-of-another-tree/saysimple.py @@ -0,0 +1,23 @@ +# TC: O(mn), SC: O(m+n) +# Definition for a binary tree node. +# class TreeNode: +# def __init__(self, val=0, left=None, right=None): +# self.val = val +# self.left = left +# self.right = right +class Solution: + def isSubtree(self, root: Optional[TreeNode], subRoot: Optional[TreeNode]) -> bool: + def prev(root, subRoot): + if not root or not subRoot: + return root == subRoot + if root.val != subRoot.val: + return False + + return prev(root.left, subRoot.left) and prev(root.right, subRoot.right) + + if not root: + return False + if prev(root, subRoot): + return True + + return self.isSubtree(root.left, subRoot) or self.isSubtree(root.right, subRoot)