2125. Number of Laser Beams in a Bank
题目简介
/**
* @param {string[]} bank
* @return {number}
*/
题目给我们可以字符串数组 bank,其字符串都是由 0 与 1 组成
其中 0 代表当前格子是空的,1 代表当前格子有安保设施
当满足以下两个条件时,安保设施可以发出一道光束:
- 当两个安保设施不在同一行时(也就是不属于同一个字符串)
- 当两个安保设施所在的两行中间没有别的带有安保设施的行(也就是要么两个安保设施所在的行紧挨着;要么两个安保设施中间的行没有安保设施)
题目要求我们在给定的 bank 下会有多少条光束产生
解题思路
根据题目我们不难看出,如果有两行 i,j 满足产生光束的条件的话,产生的光束数量为 bank[i] * bank[j]
如果有完全没有安保设施的行的话,我们直接忽略
Javascript
/**
* @param {string[]} bank
* @return {number}
*/
var numberOfBeams = function (bank) {
let res = 0
// beams in previous line
let prev = 0
for (let i = 0; i < bank.length; i++) {
let cur = 0
for (const c of bank[i]) {
if (c & 1) {
cur++
}
}
if (cur !== 0) {
res += prev * cur
prev = cur
}
}
return res
};
Javascript(或者用数组来做)
/**
* @param {string[]} bank
* @return {number}
*/
var numberOfBeams = function (bank) {
let res = 0
const arr = bank.map(str => {
return str.split('').reduce((acc, cur) => {
return acc + (cur & 1)
}, 0)
}).filter(num => num > 0)
for (let i = 1; i < arr.length; i++) {
res += arr[i] * arr[i - 1]
}
return res
};