今天刷题,碰到一个需要斜着遍历数组的题目,记录一下思路。
1. 第一种情况
遍历方向如图所示,输出结果应该是:[1,7,13,19,25,2,8,14,20,3,9,15,4,10,5]
如果你一开始不知道怎么做,可以先把对应的index写出来找规律。用A表示数组。
0 line:
A[0][0], A[1][1], A[2][2], A[3][3], A[4][4]
1 line
A[0][1], A[1][2], A[2][3], A[3][4]
2 line
A[0][2], A[1][3], A[2][4]
3 line
A[0][3], A[1][4]
4 line
A[0][4]
那么就可以看出,第一维坐标范围每次减少1,第二维坐标每次从当前line开始递增。用伪代码可能更好理解:
n=size
i=range(n), j=range(n-i), k=range(i,n)
n = len(A)
for i in range(n):
k = i
for j in range(n-i):
print(A[j][k])
k += 1
2. 第二种情况
输出结果结果应该是:[5,9,13,17,21,4,8,12,16,3,7,11,2,6,1]
没有思路,就先把坐标列出来,找规律,代码如下:
n = len(A)
for i in range(n):
k = n - i - 1
for j in range(n-i):
print(A[j][k])
k -= 1
好了,对于其他情况,只有耐下心来找出规律,代码很快就能写出来。