Предположим, на данный момент, что ваш текущий ввод:
const input = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
Теперь представьте, что мы находимся в последнем массиве этой матрицы (то есть в массиве с [7, 8, 9]
) и во время итерациичерез индексы [0..4]
(да, от 0 до 4) этого массива мы прослеживаем диагональ от bottom-rigth
до top-left
.Итак, первая и последняя диагонали будут определены следующими элементами:
First Diagonal: input[2][0] -> input[1][-1] -> input[0][-2]
Last Diagonal: input[2][4] -> input[1][3] -> input[0][2]
Теперь предположим, что мы сопоставляем значения undefined
, которые приводят к получению доступа к неопределенным индексам этих массивов, к числу 0
.Тогда последовательности, полученные из этого подхода, будут:
(Diagonal 1): 7 -> 0 -> 0 => Sum = 7
(Diagonal 2): 8 -> 4 -> 0 => Sum = 12
(Diagonal 3): 9 -> 5 -> 1 => Sum = 15
(Diagonal 4): 0 -> 6 -> 2 => Sum = 8
(Diagonal 5): 0 -> 0 -> 3 => Sum = 3
Я надеюсь, что вы поняли до этого момента, потому что следующая логика использует этот подход для получения суммы диагоналей.
const input1 = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
const input2 = [
[1, 2, 3, 9],
[4, 5, 6, 9],
[7, 8, 9, 9],
[2, 2, 2, 2]
];
const getDiagonalsSums = (matrix) =>
{
let len = matrix.length;
let dSums = new Array(len * 2 - 1).fill(0);
for (var i = 0; i < dSums.length; i++)
{
for (var j = len - 1; j >= 0; j--)
{
dSums[i] += (matrix[j][i + j - len + 1] || 0);
}
}
return dSums;
}
console.log(JSON.stringify(getDiagonalsSums(input1)));
console.log(JSON.stringify(getDiagonalsSums(input2)));