在 JavaScript 中杀死敌人
问题
假设,我们有一个2D网格,每个单元格是墙“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