498_Diagonal Traverse

Input:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
Output: [1,2,4,7,5,3,6,8,9]Solution 1: brute force
Solution 2: use sorting
Last updated

Input:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
Output: [1,2,4,7,5,3,6,8,9]Last updated
def findDiagonalOrder(matrix):
"""
:type matrix: List[List[int]]
:rtype: List[int]
"""
if not matrix: return []
output = []
m = len(matrix)
n = len(matrix[0])
i, j, flag = 0, 0, 1
while i < m and j < n:
output.append(matrix[i][j])
if flag == 1: # go up right
if j == n - 1:
i += 1
flag *= -1
elif i == 0:
j += 1
flag *= -1
else:
i -= 1
j += 1
else: # go down left
if i == m - 1:
j += 1
flag *= -1
elif j == 0:
i += 1
flag *= -1
else:
i += 1
j -= 1
return outputdef findDiagonalOrder(matrix):
"""
:type matrix: List[List[int]]
:rtype: List[int]
"""
l = [(i, j) for i in range(len(matrix)) for j in range(len(matrix[0]))]
l.sort(key=lambda x: sum(x) * (len(matrix) + len(matrix[0]) ) - x[sum(x)%2])
return [matrix[x][y] for x, y in l]