Description:
将一个矩阵(二维数组)按对角线向右进行打印。(搜了一下发现好像是美团某次面试要求半小时手撕的题)
Example:
Input:
[
[1,2,3,4],
[5,1,2,3],
[9,5,1,2]
]
Output:
[[4],
[3, 3],
[2, 2, 2],
[1, 1, 1],
[5, 5],
[9]]
思路: 考虑每条对角线开头元素的index(i,j)。i从0开始遍历,j从col-1开始遍历,首先考虑j的变化,若j变为0,则保持不变,让i变化。在确定开头元素后,可通过设置i+1,j+1及不超过范围来向lst中对角线上添加元素。
对于以上例子,各对角线开头元素的index分别为:
(0,3)
(0,2)
(0,1)
(0,0)
(1,0)
(2,0)
其中各lst中的元素index分别为:
[(0,3)]
[(0,2),(1,3)]
[(0,1),(1,2),(2,3)]
[(0,0),(1,1),(2,2)]
[(1,0),(2,1)]
[(2,0)]
代码:
def diagonal_right(matrix):
if not matrix:
return []
row = len(matrix)
col = len(matrix[0])
col2 = col
result = []
for i in range(row):
for j in range(col2 - 1, -1, -1): #j倒序遍历
lst =