基本思路:由于对角线性质,对角线划出来最多只有长加宽减1条(0到n+m-1),而且偶数对角线是朝上的,奇数对角线是朝下的,朝上时维护行不过顶且列不过右,朝下时维护列不过左,行不过底即可。代码如下:
class Solution:
def findDiagonalOrder(self, mat: List[List[int]]) -> List[int]:
k=[]
t,j=0,0
for i in range(len(mat)+len(mat[0])-1):
if i%2==0:
if t==len(mat):
t-=1
j+=1
while t>=0 and len(mat[0])-1>=j:
k.append(mat[t][j])
t-=1
j+=1
t+=1
if i%2==1:
if j==len(mat[0]):
j-=1
t+=1
while len(mat)-1>=t and j>=0:
k.append(mat[t][j])
t+=1
j-=1
j+=1
return k