419.甲板上的戰艦(dfs, 沉沒戰艦)
給定一個二維的甲板, 請計算其中有多少艘戰艦。 戰艦用 'X'表示,空位用 '.'表示。 你需要遵守以下規則:
給你一個有效的甲板,僅由戰艦或者空位組成。
戰艦隻能水平或者垂直放置。換句話說,戰艦隻能由 1xN (1 行, N 列)組成,或者 Nx1 (N 行, 1 列)組成,其中N可以是任意大小。
兩艘戰艦之間至少有一個水平或垂直的空位分隔 - 即沒有相鄰的戰艦。
示例 :
X..X
...X
...X
在上面的甲板中有2艘戰艦。
無效樣例 :
...X
XXXX
...X
你不會收到這樣的無效甲板 - 因為戰艦之間至少會有一個空位將它們分開。
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/battleships-in-a-board
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
思考
我們打算遍歷這個二維陣列,然後遇到X就開始就記個數。但這樣有個問題,比如又變那一列,3個X其實是一艘戰艦,如果遇上了都數一遍,就會重複數。
所以數過的戰艦需要“沉沒”掉,把"X"變為"."
怎樣探索一艘戰艦包含哪些X呢,注意到戰艦隻能橫向或者縱向成一豎。
首先檢查點有沒有越界,是不是在甲板上(X),不是的話直接返回。
符合條件的話:
我們就先將這個點變成".",然後對這個點進行深度優先搜尋,向四周探索。
探索到下一個X點,就繼續dfs.
下圖註釋
遍歷二維陣列,到(0,0),發現是X。船數+1
就dfs(0,0)
將board[0][0] = "."
然後dfs四周的點。發現左邊和上邊的點越界了,右邊和下邊的點不是X,所以直接返回。
然後遍歷(0,1), (0,2), 都不是X,沒事
到(0,3)了,它是X,船數+1. dfs(0,3)
首先將board[0][3]置為"."
dfs四周的點。
左邊不是X,上和右邊越界了,直接返回。
dfs(1,3)
沒有越界,且是X
board[1][3] 置為"."
dfs四周
這個時候,左邊上邊都不是X,右邊越界,直接返回。
dfs(2,3)
沒有越界,且是X
board[2][3] 置為"."
左邊,上邊都不是X,下邊和右邊越界,直接返回。
回到主遍歷線,遍歷(1,0), (1,1)...... (2,3),都沒找到X,所以返回戰艦數2
程式碼實現
/**
* @param {character[][]} board
* @return {number}
*/
var countBattleships = function(board) {
let result = 0
for (let row = 0; row < board.length; row++) {
for (let col = 0; col < board[0].length; col++) {
if (board[row][col] === 'X') {
result++
dfs(row, col)
}
}
}
function dfs(row, col) {
//當前點條件判斷
//越界或不在甲板上直接返回
if (row < 0 || row >= board.length || col < 0 || col >= board[0].length ||
board[row][col] !== 'X') {
return
}
//沉默當前點
board[row][col] = '.'
//對四個方向進行深度優先搜尋
dfs(row-1, col)
dfs(row+1, col)
dfs(row, col-1)
dfs(row, col+1)
}
return result
};
相關文章
- Leetcode419 甲板上的戰艦LeetCode
- 戰艦再度起航!《海岸線:戰艦養成計劃》9月24日不刪檔測試
- 360聯運坦克世界、戰艦世界 年內實現全球同步
- OPPO Find系列未來旗艦Find X,歸來再戰“江湖”
- 以拳力赴波濤 《戰艦世界》SNK聯動正式開啟
- 《戰艦世界閃擊戰》專案經理談如何協調跨國專案團隊工作
- 《沉沒之城》的沉沒:Frogwares的維權之路
- 戰艦少女R普林茨·尤金號3D列印模型3D模型
- 945艦艇鋼
- 艦隊統帥
- 《綠盟+》好文推薦| 軍迷必看,手握軍艦攻略好登艦
- 少女集結!《海岸線:戰艦養成計劃》9月17日App Store正式起航!APP
- L907A艦艇鋼
- vivo NEX旗艦版和標準版的區別 vivo NEX和旗艦版哪個好?
- 國行NS天貓旗艦店測試連結上架
- 黑莓旗艦KEY2正式釋出 全鍵盤旗艦、經典與創新融合
- 而更為重要的是,“群艦”的駛入,
- 2018上半年釋出高階艦機盤點 上半年旗艦手機有哪些
- 親臨甲板,今日起航!來《放置海域》隨時隨地燃戰一場
- 饅頭的1day漏洞巡艦系統
- Win7旗艦版硬碟ahci模式如何開啟?Win7旗艦版硬碟ahci模式的開啟方法Win7硬碟模式
- win10 home如何轉旗艦版_win10 home升級到旗艦版最新教程Win10
- 3D艦姬即時海戰手遊《蒼藍誓約》7月10日全平臺公測3D
- Win7旗艦版配色方案basic怎麼改?Win7系統旗艦版配色方案改回basic的方法Win7
- 基於正點原子SRM32F103ZET6精英板(戰艦板)的貪吃蛇小遊戲(附原始碼)遊戲原始碼
- 本月新遊前瞻 | 戰錘 40K:混沌之門 - 惡魔獵人、鬼玩人、迷走深空:碎艦師
- Win7旗艦版重灌系統怎麼操作 win7旗艦版系統重灌圖文教程Win7
- 「草莓」即將上線,OpenAI新旗艦大模型曝光,代號「獵戶座」OpenAI大模型
- 任天堂Switch官方旗艦店上線營銷頁面 即將開業
- DBeaverUE for Mac v23.2.5旗艦啟用版Mac
- 3D艦姬即時海戰手遊《蒼藍誓約》7月16日全平臺公測開啟3D
- 一加 Ace 2V 搭載旗艦晶片天璣9000 深度聯調釋放旗艦級效能實力晶片
- 酷開P70新旗艦智慧屏怎麼樣?酷開P70新旗艦智慧屏評測
- 下半年的國產手機更刺激:魅族華為小米全要上新旗艦
- 2024年旗艦手機和中端機的區別
- 《黑潮:深海覺醒》能打破“艦系擬人”的困局嗎?
- Win7旗艦版系統如何設定WLAN密碼?Win7旗艦版系統WLAN密碼的設定教程Win7密碼
- 鉅艦轉向,蘋果能否藉此重回巔峰?蘋果