498. Diagonal Traverse
对角线 matrix坐标
Input: mat = [[1,2,3],[4,5,6],[7,8,9]]
Output: [1,2,4,7,5,3,6,8,9]Input: mat = [[1,2],[3,4]]
Output: [1,2,3,4]对角线方向
公式
k取值范围
应用题目
是否对称轴
Last updated
对角线 matrix坐标
Input: mat = [[1,2,3],[4,5,6],[7,8,9]]
Output: [1,2,4,7,5,3,6,8,9]Input: mat = [[1,2],[3,4]]
Output: [1,2,3,4]Last updated
class Solution:
def findDiagonalOrder(self, mat: List[List[int]]) -> List[int]:
if not mat or not mat[0]:
return []
res = []
n,m = len(mat), len(mat[0])
for k in range(n+m-1):
path = []
for i in range(n):
j = k - i
if 0 <= j < m:
path.append(mat[i][j])
if k%2 == 0:
path.reverse()
res += path
return res
class Solution:
def findDiagonalOrder(self, mat: List[List[int]]) -> List[int]:
if not mat or not mat[0]:
return []
res = []
n,m=len(mat),len(mat[0])
row,col = 0,0
dir = 1 #1 up, -1 down
for _ in range(n*m):
res.append(mat[row][col])
new_col = col + (1 if dir == 1 else -1)
new_row = row + (-1 if dir == 1 else 1)
if 0<=new_row<n and 0<=new_col<m:
row,col=new_row,new_col
else:
if dir==1:
if 0<=col + 1<m:
col += 1
else:
row += 1
else:
if 0<=row+1<n:
row += 1
else:
col += 1
dir *= -1
return res