【问题标题】:How to find the diagonals of a point in a 2D Array如何在二维数组中找到一个点的对角线
【发布时间】:2021-04-26 09:25:07
【问题描述】:

我有一个这样的二维数组:

const matrix = [
  [0, 0, 0, 0],
  [0, 2, 1, 0],
  [0, 1, 2, 0],
  [0, 0, 0, 0]
]

如果给定单元格的xy,例如21matrix[2][1]1),我怎样才能找到所有对角线(两个数组,每个其中包含对角线中每个单元格的点以正确的顺序)通过提供的单元格?矩阵(数组)始终是对称的正方形(准确地说,我有一个 8x8 的网格)。

例子:

const matrix = [
  [0, 0, 0, 0],
  [0, 2, 1, 0],
  [0, 1, 2, 0],
  [0, 0, 0, 0]
];

const cellX = 2, cellY = 1;

// Code ...

const diagonalFromTopLeft = [0, 1, 0];
const diagonalFromTopRight = [0, 1, 1, 0]

如果你能找到每条线,而不仅仅是对角线(垂直和水平,但我自己能弄明白),就会得到加分。

【问题讨论】:

  • 我假设输入矩阵并不总是对称的,对吧?
  • 另外,输入矩阵是否总是正方形的?
  • @yunzen 它们总是对称的和方形的,尽管它们会更大。确切地说,我将有一个 8x8 网格。
  • @trincot 都是从 0 开始的。我解决了这个问题
  • 是的@trincot。感谢您指出了这一点。我修好了

标签: javascript arrays multidimensional-array


【解决方案1】:

您可以迭代行(和相应的索引)并计算两条对角线上的相应 x 坐标。当它们在范围内时,可以将相应的值添加到相关数组中:

function diagonals(matrix, cellX, cellY) {
    let forward = []; // diagonal according forward slash shape: / 
    let backward = []; // diagonal according backslash shape: \
    let n = matrix.length;
    matrix.forEach((row, y) => {
        let x = cellX - (cellY - y);
        if (x >= 0 && x < n) backward.push(row[x]);
        x = cellX + (cellY - y);
        if (x >= 0 && x < n) forward.push(row[x]); 
    });
    return [forward, backward];
}


const matrix = [
  [0, 0, 0, 0],
  [0, 2, 1, 0],
  [0, 1, 2, 0],
  [0, 0, 0, 0]
];

const cellX = 2, cellY = 1;

console.log(diagonals(matrix, cellX, cellY));

【讨论】:

  • 有效!虽然我必须通读该数学才能了解如何;)
  • 这里好像向前其实是向后。
  • 是的,这取决于您如何称呼他们。我在“反斜杠”(\)中使用了向后,在“正斜杠”(/)中使用了向前
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-24
  • 1970-01-01
  • 1970-01-01
  • 2015-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多