我有一个多维数组,它的值只有 0 和 1。我想找到值 1 在线性对中的出现次数。
示例:下面是一个矩阵(将其视为 javascript 中的多维数组):
1 0 1 0 0
1 0 0 0 0
1 0 1 1 1
0 0 1 0 0
我想要的输出是总数。水平和垂直(不相邻)的线性对 1 的出现次数:
在这种情况下,输出是:3(前 3 行的第一列中的一个。第二个是最后两行的第三列。最后一个是第三行的最后三列)。
任何解决方案或想法都会奏效。如果对 javascript 不满意,请随意使用任何编程语言。
只是检查的前身与falsy与前作的价值truthy在两个方向上的价值和数量。
它通过寻找类似 的模式来工作
0 1 1
,其中最后一项是实际位置,用 表示[]
,这必须是真实的。用 表示的前身也()
必须为真。用 表示的最后一项{}
是必要的分隔符,并且对于计算起始模式必须为假。基本上,上述模式是在两个方向上查找和计数。
垂直的
{u} +---------------+ |(1) 0 1 0 0 | | | |[1] 0 {0} 0 0 | | | | 1 0 (1) 1 1 | | | | 0 0 [1] 0 0 | +---------------+
水平的
+---------------+ | 1 0 1 0 0 | | | | 1 0 0 0 0 | | | | 1 {0}(1)[1] 1 | | | | 0 0 1 0 0 | +---------------+
u
意味着undefind
并且不是矩阵的一部分
var matrix = [[1, 0, 1, 0, 0], [1, 0, 0, 0, 0], [1, 0, 1, 1, 1], [0, 0, 1, 0, 0]],
count = 0;
matrix.forEach((row, i, m) =>
row.forEach((v, j, r) => {
if (!v) return;
if (m[i - 1] && m[i - 1][j] && (!m[i - 2] || !m[i - 2][j])) ++count;
if (r[j - 1] && !r[j - 2]) ++count;
})
);
console.log(count);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句