在 JavaScript 中消灭敌人


问题

假设我们有一个二维网格,每个单元格要么是墙壁 'W',要么是敌人 'E',要么是空 '0'(数字零)。我们需要编写一个函数,返回我们使用一枚炸弹最多可以消灭的敌人数量。

炸弹会消灭从放置点开始,在同一行和同一列的所有敌人,直到遇到墙壁(因为墙壁太坚固无法摧毁)。

我们还必须记住,我们只能将炸弹放在空单元格中。例如,如果函数的输入是:

const arr = [
   ['0', 'E', '0', '0'],
   ['E', '0', 'W', 'E'],
   ['0', 'E', '0', '0']
];

那么输出应该是:

const output = 3;

输出解释

在 [1,1] 位置放置炸弹将消灭 3 个敌人,这是最多的。

示例

这段代码将是:

 在线演示

const arr = [
   ['0', 'E', '0', '0'],
   ['E', '0', 'W', 'E'],
   ['0', 'E', '0', '0']
];
const killEnemy = (arr = []) => {
   let m = arr.length;
   let n = m > 0 ? arr[0].length : 0;
   let result = 0, rows = 0;
   const cols = [];
   for (let i = 0; i < m; ++i) {
      for (let j = 0; j < n; ++j) {
         if (j === 0 || arr[i][j-1] === 'W') {
            rows = 0;
            for (let k = j; k < n && arr[i][k] != 'W'; ++k)
            if (arr[i][k] === 'E')
            rows += 1;
         }
         if (i === 0 || arr[i-1][j] === 'W') {
            cols[j] = 0;
            for (let k = i; k < m && arr[k][j] != 'W'; ++k)
               if (arr[k][j] === 'E')
                  cols[j] += 1;
         }
         if (arr[i][j] === '0' && rows + cols[j] > result)
         result = rows + cols[j];
      }
   }
   return result;
};
console.log(killEnemy(arr));

输出

控制台中的输出将是:

3

更新于:2021年3月18日

224 次浏览

启动您的 职业生涯

完成课程获得认证

开始
广告