2125. Number of Laser Beams in a Bank

Leetcode link

题目简介

/**
 * @param {string[]} bank
 * @return {number}
 */

题目给我们可以字符串数组 bank,其字符串都是由 0 与 1 组成

其中 0 代表当前格子是空的,1 代表当前格子有安保设施

当满足以下两个条件时,安保设施可以发出一道光束

  1. 当两个安保设施不在同一行时(也就是不属于同一个字符串)
  2. 当两个安保设施所在的两行中间没有别的带有安保设施的行(也就是要么两个安保设施所在的行紧挨着;要么两个安保设施中间的行没有安保设施)

题目要求我们在给定的 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
};

results matching ""

    No results matching ""