这题难度中等,记录下思路
第一个会超时,
第二个:思想是按斜对角线行进行右下左上交替遍历,
1 def traverse(matrix): 2 n=len(matrix)-1 3 m=len(matrix[0])-1 4 result= [] 5 for i in range(m+n+1 ): 6 if (i % 2 == 0): 7 for j in range(i, -1, -1 ): 8 x= j 9 y=i- x 10 if x <= n and y <= m: 11 result.append(matrix[x][y]) 12 # elif y > m: 13 # break 14 else : 15 continue 16 else : 17 for j in range(i, -1, -1 ): 18 y= j 19 x=i- y 20 if x <= n and y <= m: 21 result.append(matrix[x][y]) 22 # elif x > n: 23 # break 24 else : 25 continue 26 return result 27 28 if __name__ == ' __main__ ' : 29 ma= [ 30 [ 1, 2, 3 ], 31 [ 4, 5, 6 ], 32 [ 7, 8, 9 ] 33 ] 34 print (traverse(ma))
11
1 def diagonial(matrix): 2 m= len(matrix) 3 n= len(matrix[0]) 4 # 思想是按斜对角线行进行遍历 5 # 遍历的方向右下,左上交替进行 6 line= 0 7 res= [] 8 tem= [] 9 is_sure= True 10 # 对每一行进行循环 斜对角线有m+n-1条 11 while line<(m+n-1 ): 12 # 设置起点 13 if (line< m): 14 x= line 15 y= 0 16 else : 17 x=m-1 18 y=line-m-1 19 # 每行循环几次 20 # 因为都是从右上开始,所以设置条件x>0,y21 while x>=0 and y < n: 22 # 存储斜行的元素 23 tem.append(matrix[x][y]) 24 x-=1 25 y+=1 26 # 如果是左下开始,则反向添加 27 if (is_sure): 28 tem.reverse() 29 for num in tem: 30 res.append(num) 31 line+=1 32 return res 33 34 35 if __name__ == ' __main__ ' : 36 matrix= [ 37 [ 1, 2, 3 ], 38 [ 4, 5, 6 ], 39 [ 7, 8, 9 ] 40 ] 41 print (diagonial(matrix))