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:
+
+
+ m == mat.length
+ n == mat[i].length
+ 1 <= m, n <= 104
+ 1 <= m * n <= 104
+ -105 <= mat[i][j] <= 105
+
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
+