From 265aa30b156c5ca7b117b87208a9db592750c28d Mon Sep 17 00:00:00 2001 From: Jimit Dholakia <25223469+jimit105@users.noreply.github.com> Date: Sun, 29 Dec 2024 07:27:00 +0000 Subject: [PATCH] Sync LeetCode submission Runtime - 14 ms (44.74%), Memory - 19.7 MB (47.58%) --- 0498-diagonal-traverse/README.md | 27 ++++++++++++++++++++ 0498-diagonal-traverse/solution.py | 40 ++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 0498-diagonal-traverse/README.md create mode 100644 0498-diagonal-traverse/solution.py diff --git a/0498-diagonal-traverse/README.md b/0498-diagonal-traverse/README.md new file mode 100644 index 0000000..b468ea3 --- /dev/null +++ b/0498-diagonal-traverse/README.md @@ -0,0 +1,27 @@ +

Given an m x n matrix mat, return an array of all the elements of the array in a diagonal order.

+ +

 

+

Example 1:

+ +
+Input: mat = [[1,2,3],[4,5,6],[7,8,9]]
+Output: [1,2,4,7,5,3,6,8,9]
+
+ +

Example 2:

+ +
+Input: mat = [[1,2],[3,4]]
+Output: [1,2,3,4]
+
+ +

 

+

Constraints:

+ + diff --git a/0498-diagonal-traverse/solution.py b/0498-diagonal-traverse/solution.py new file mode 100644 index 0000000..140be9f --- /dev/null +++ b/0498-diagonal-traverse/solution.py @@ -0,0 +1,40 @@ +# Approach 1: Diagonal Iteration and Reversal + +# Time: O(n * m) +# Space: O(min(n, m)) + +class Solution: + def findDiagonalOrder(self, mat: List[List[int]]) -> List[int]: + if not mat or not mat[0]: + return [] + + n, m = len(mat), len(mat[0]) + + result, intermediate = [], [] + + for d in range(n + m - 1): + intermediate.clear() + + # We need to figure out the "head" of this diagonal + # The elements in the first row and the last column + # are the respective heads. + r, c = 0 if d < m else d - m + 1, d if d < m else m - 1 + + # Iterate until one of the indices goes out of scope + # Take note of the index math to go down the diagonal + while r < n and c > -1: + intermediate.append(mat[r][c]) + r += 1 + c -= 1 + + # Reverse even numbered diagonals. The + # article says we have to reverse odd + # numbered articles but here, the numbering + # is starting from 0 :P + if d % 2 == 0: + result.extend(intermediate[::-1]) + else: + result.extend(intermediate) + + return result +