Print Matrix Diagonal
题目描述
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16 17 18 19 20 Diagonal printing of the above matrix is
1
2 5
3 6 9
4 7 10 13
8 11 14 17
12 15 18
16 19
20
解题方法
这个题目可以从右上到左下,从左下到右上,还可以每次转换方向,并且不一定是正方形。
通过观察可以得出
- diagonal lines的总数是row number + column number - 1
- 自行对这些line编号,找到它们的规律
- 根据起点的位置来计算,这里从右上往左下,我们可以对地点列的位置进行判断
Solution
def print_diagonal(matrix):
row_num = len(matrix)
col_num = len(matrix[0])
if not row_num or not col_num:
return
total_lines = row_num + col_num - 1
results = []
for i in range(total_lines):
if i < col_num:
dia_col = i
dia_row = 0
dia_values = []
while dia_col >= 0 and dia_row < row_num:
dia_values.append(matrix[dia_row][dia_col])
dia_col -= 1
dia_row += 1
results.append(dia_values)
else:
dia_col = col_num - 1
dia_row = i - col_num + 1
dia_values = []
while dia_col >= 0 and dia_row < row_num:
dia_values.append(matrix[dia_row][dia_col])
dia_col -= 1
dia_row += 1
results.append(dia_values)
return results