JavaScript二进制矩阵中最近0的距离
二进制矩阵是由数组组成的数组,其中仅包含 0 或 1。我们需要编写一个 JavaScript 函数,该函数仅将二进制矩阵作为唯一参数。
我们的函数应该创建一个包含相同行数和列数的新矩阵,并且对于原始矩阵的每个元素,所得矩阵应该包含该元素在原始矩阵中到 0 的最近距离。
我们必须牢记在计算距离时,它可以水平或垂直移动,而不能对角线移动。并且保证该矩阵至少包含一个 0。
例如 -
如果输入矩阵为 -
const arr = [ [0, 0, 0] [0, 1, 0] [1, 1, 1] ];
那么输出矩阵应该是 -
const output = [ [0, 0, 0] [0, 1, 0] [1, 2, 1] ];
实例
代码如下 -
const arr = [ [0, 0, 0], [0, 1, 0], [1, 1, 1], ]; const findNearestDistance = (arr = []) => { let array = []; let res = arr.map((el, ind) => el.map((subEl, subInd) => { if (subEl === 0) { array.push([ind, subInd]) return 0 }; return Number.MAX_SAFE_INTEGER; })); const updateAdjacent = (ind, subInd, min, array = []) => { if (ind < 0 || subInd < 0 || ind == arr.length || subInd == arr[0].length){ return; }; if (res[ind][subInd] < min + 2) return res[ind][subInd] = min + 1 array.push([ind, subInd]) }; while (array.length) { let next = [] for (let [ind, subInd] of array) { updateAdjacent(ind, subInd + 1, res[ind][subInd], next) updateAdjacent(ind, subInd - 1, res[ind][subInd], next) updateAdjacent(ind + 1, subInd, res[ind][subInd], next) updateAdjacent(ind - 1, subInd, res[ind][subInd], next) }; array = next; } return res; }; console.log(findNearestDistance(arr));
输出
控制台中的输出将是 -
[ [ 0, 0, 0 ], [ 0, 1, 0 ], [ 1, 2, 1 ] ]
广告