这题难度中等,记录下思路
第一个会超时,
第二个:思想是按斜对角线行进行右下左上交替遍历,
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))
在学习过程中有什么不懂得可以加
我的python学习交流扣扣qun,688244617
群里有不错的学习教程、开发工具与电子书籍。
与你分享python企业当下人才需求及怎么从零基础学习好python,和学习什么内容。
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))