欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python(leetcode)498. 对角线遍历

程序员文章站 2022-06-29 22:38:35
这题难度中等,记录下思路 第一个会超时, 第二个:思想是按斜对角线行进行右下左上交替遍历, 11 ......

这题难度中等,记录下思路

第一个会超时,

第二个:思想是按斜对角线行进行右下左上交替遍历,

 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,y<n
21         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))