在 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
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP