1424. Diagonal Traverse II - Detailed Explanation
Problem Statement
You’re given a list of integer lists nums, where each inner list may have different lengths. Imagine these as rows of a ragged matrix. You need to traverse all elements in diagonal order: collect elements on each diagonal (where row+col is constant), but output elements in each diagonal from bottom to top. Return the flattened list of all elements in that diagonal order.
Examples
Example 1
Input: nums = [[1,2,3],
[4,5],
[6,7,8,9]]
Output: [1,4,2,6,5,3,7,8,9]
Explanation
- Diagonal 0 (i+j=0): [1] → [1]
- Diagonal 1 (i+j=1): [2,4] → reversed → [4,2]
- Diagonal 2 (i+j=2): [3,5,6] → reversed → [6,5,3]
- Diagonal 3 (i+j=3): [7] → [7]
- Diagonal 4 (i+j=4): [8] → [8]
- Diagonal 5 (i+j=5): [9] → [9]
Example 2
Input: nums = [[1,2,3,4,5]]
Output: [1,2,3,4,5]
Explanation
Only one row, so each element is its own diagonal.
Constraints
1 ≤ nums.length ≤ 10⁵(total rows)1 ≤ nums[i].length ≤ 10⁵- Sum of all
nums[i].length≤ 10⁵ -10⁹ ≤ nums[i][j] ≤ 10⁹
Hints
- Group elements by the sum of their row and column indices (
d = i + j). - Within each group, you need to output in reverse of insertion order (bottom to top).
- A hash map from
dto a list of values plus a final pass over sorted keys works in O(N) time.
Approaches
Approach 1 Hash Map of Diagonals + Reverse
- Collect
- Create an empty map
Map<Integer,List<Integer>> diag. - For each row index
ifrom 0 tonums.length-1, and each column indexjin that row:- Compute
d = i + j. - Append
nums[i][j]todiag.get(d).
- Compute
- Create an empty map
- Flatten
- Create an output list
res. - For each diagonal index
din increasing order:- Retrieve the list
lst = diag.get(d). - Iterate
lstin reverse and append each value tores.
- Retrieve the list
- Create an output list
- Return
res.
Step‐by‐Step Walkthrough for Example 1
nums = [[1,2,3],
[4,5],
[6,7,8,9]]
Pass 1: collect into diag
d=0 → [1]
d=1 → [2]
d=2 → [3]
d=1 → [2,4]
d=2 → [3,5]
d=3 → [7]
d=2 → [3,5,6]
d=3 → [7,8]
d=4 → [9]
But careful by rows:
i=0: j=0→d0:[1], j=1→d1:[2], j=2→d2:[3]
i=1: j=0→d1:[2,4], j=1→d2:[3,5]
i=2: j=0→d2:[3,5,6], j=1→d3:[7], j=2→d4:[8], j=3→d5:[9]
Pass 2: flatten in key order
d=0: [1] → [1]
d=1: [2,4] reversed → [4,2]
d=2: [3,5,6] reversed → [6,5,3]
d=3: [7] → [7]
d=4: [8] → [8]
d=5: [9] → [9]
Result → [1,4,2,6,5,3,7,8,9]
Complexity
- Time O(N) to traverse all elements + O(D) to iterate diagonals, where N = total elements and D = number of diagonals (≤N).
- Space O(N) for the map and result.
Approach 2 Priority Queue by (diagonal, −row)
- For every element
(i,j), push(i+j, -i, value)into a min-heap. - Pop all elements in heap order, collecting
value. - This automatically orders first by
i+j, then by largerifirst (because of-i).
Complexity
- Time O(N log N) due to heap operations.
- Space O(N).
Common Mistakes
- Not reversing each diagonal’s list → yields top‑to‑bottom instead of bottom‑to‑top.
- Assuming rectangular matrix → inner lists may differ in length.
- Using
TreeMapon every access → slower than collecting keys once.
Python Code
Python3
Python3
. . . .
Java Code
Java
Java
. . . .
Edge Cases
- Single row or single column → just flatten that row or column.
- Very uneven row lengths → algorithm handles naturally.
- Negative or zero values → no special handling needed.
Alternative Variations
- Traverse anti‑diagonals but output top‑to‑bottom.
- Zigzag diagonal order (alternating direction per diagonal).
Related Problems
TAGS
leetcode
CONTRIBUTOR
Design Gurus Team
-
GET YOUR FREE
Coding Questions Catalog
Boost your coding skills with our essential coding questions catalog.
Take a step towards a better tech career now!
Explore Answers
1267. Count Servers that Communicate - Detailed Explanation
Learn to solve Leetcode 1267. Count Servers that Communicate with multiple approaches.
135. Candy - Detailed Explanation
Learn to solve Leetcode 135. Candy with multiple approaches.
767. Reorganize String - Detailed Explanation
Learn to solve Leetcode 767. Reorganize String with multiple approaches.
2851. String Transformation - Detailed Explanation
Learn to solve Leetcode 2851. String Transformation with multiple approaches.
1401. Circle and Rectangle Overlapping - Detailed Explanation
Learn to solve Leetcode 1401. Circle and Rectangle Overlapping with multiple approaches.
185. Department Top Three Salaries - Detailed Explanation
Learn to solve Leetcode 185. Department Top Three Salaries with multiple approaches.
Related Courses
Grokking the Coding Interview: Patterns for Coding Questions
Grokking the Coding Interview Patterns in Java, Python, JS, C++, C#, and Go. The most comprehensive course with 476 Lessons.
4.6
$197

Grokking Modern AI Fundamentals
Master the fundamentals of AI today to lead the tech revolution of tomorrow.
3.9
$78
Grokking Data Structures & Algorithms for Coding Interviews
Unlock Coding Interview Success: Dive Deep into Data Structures and Algorithms.
4
$78
One-Stop Portal For Tech Interviews.
Copyright © 2025 Design Gurus, LLC. All rights reserved.