Найти сумму соседей 2d массива - PullRequest
0 голосов
/ 15 июня 2019

Напишите функцию, в которой функция принимает за 2 входа матрицу, например, двумерный массив, и индексы: например, [строка, столбец]. Эта функция должна возвращать сумму всех соседей по вторым входам (вверх, вниз,слева, справа, диагонали)

Какова будет сложность приведенного ниже кода. Я думаю, что временная сложность будет O (строка * столбцы) и постоянное пространство O (1).Пожалуйста, предоставьте мысли.

function validateMatrixCoordinates(arrayMatrix, x, y) {
  if (!Array.isArray(arrayMatrix) || !Array.isArray(arrayMatrix[0])) {
    console.log("arrayMatrix is not a matrix of arrays");
    return false;
  }
  if (!Number.isInteger(x) || !Number.isInteger(y)) {
    console.log("Index is not an Integer");
    return false;
  }
  if (x < 0 || y < 0 || x > arrayMatrix.length - 1 || y > arrayMatrix[0].length - 1) {
    console.log("Index is Out Of Bounds");
    return false;
  }
  return true;
}

function sumMatrixNeighbors(arrayMatrix, x, y) {
  let rowLimit = arrayMatrix.length - 1;
  let columnLimit = arrayMatrix[0].length - 1;
  let sum = 0;

  if (!validateMatrixCoordinates(arrayMatrix, x, y)) {
    return;
  }
  for (let i = Math.max(0, x - 1); i <= Math.min(x + 1, rowLimit); i++) {
    for (let j = Math.max(0, y - 1); j <= Math.min(y + 1, columnLimit); j++) {
      if ((x !== i || y !== j) && Number.isInteger(arrayMatrix[i][j])) {
        sum += arrayMatrix[i][j];
      }
    }
  }

  return sum;
}

let input = [
  [0, 1, 2, 3, 4],
  [1, 2, 3, 4, 5],
  [2, 3, 4, 5, 6]
];

console.log('Result for [2, 1]: ' + sumMatrixNeighbors(input, 2, 1));
console.log('Result for [0, 0]: ' + sumMatrixNeighbors(input, 0, 0));
console.log('Result for ["a", 0]: ' + sumMatrixNeighbors(input, "a", 0));
console.log('Result for [1, -1]: ' + sumMatrixNeighbors(input, 1, -1));
console.log('Result for [1, 4]: ' + sumMatrixNeighbors(input, 1, 4));
...