从左上角到右下角
对于一个 m x n 的矩阵,有 m + n - 1 条斜线。将其从右到左从1开始标记至 m+n-1, 这样标记我们可以得到 k = n - j + i
对于第 k 条斜线上的某个点 (i, j),我们已知知 k = n - j + i, 从而推出对于 i 行,
j = n - k + i
# assume matrix mat
diag = [[] for _ in range(m + n)]
# 根据每个数分组
for i in range(m):
for j in range(n):
k = n - j + i
diag[k].append(mat[i][j])
# 根据组,找到每个数
for k in range(1, m + n):
minj, maxj = max(0, n - k), max(n - 1, n - k + m - 1)
for j in range(minj, maxj + 1):
mat[k + j - n][j]从左下角到右上角
同样的有这么m + n - 1条斜线,但是这里我们可以找到规律,对于每条斜线里面点来说,他们的坐标i + j都是相同的。我们可以简单的遍历矩阵按照坐标分组即可