There are diagonals. We traverse each element and append them in forward or reverse order depending on the parity of the diagonal’s index.
class Solution:
def findDiagonalOrder(self, mat: List[List[int]]) -> List[int]:
if not mat or not mat[0]:
return []
m, n = len(mat), len(mat[0])
result = []
for d in range(m + n - 1):
intermediate = []
r = 0 if d < n else d - n + 1
c = d if d < n else n - 1
while r < m and c >= 0:
intermediate.append(mat[r][c])
r += 1
c -= 1
if d % 2 == 0:
result.extend(reversed(intermediate))
else:
result.extend(intermediate)
return result