給定乙個二維的甲板, 請計算其中有多少艘戰艦。 戰艦用 'x'表示,空位用 '.'表示。 你需要遵守以下規則:
給你乙個有效的甲板,僅由戰艦或者空位組成。
戰艦只能水平或者垂直放置。換句話說,戰艦只能由 1xn (1 行, n 列)組成,或者 nx1 (n 行, 1 列)組成,其中n可以是任意大小。
兩艘戰艦之間至少有乙個水平或垂直的空位分隔 - 即沒有相鄰的戰艦。
示例 :
x..x
...x
...x
在上面的甲板中有2艘戰艦。
無效樣例 :
...x
***x
...x
你不會收到這樣的無效甲板 - 因為戰艦之間至少會有乙個空位將它們分開。
思考
我們打算遍歷這個二維陣列,然後遇到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 board
* @return
*/var countbattleships = function(board) }}
function dfs(row, col)
//沉默當前點
board[row][col] = '.'
//對四個方向進行深度優先搜尋
dfs(row-1, col)
dfs(row+1, col)
dfs(row, col-1)
dfs(row, col+1)
}return result
};
Leetcode 419 甲板上的戰艦
給定乙個二維的甲板,請計算其中有多少艘戰艦。戰艦用 x 表示,空位用 表示。你需要遵守以下規則 示例 x.x x x 在上面的甲板中有2艘戰艦。無效樣例 x x x 你不會收到這樣的無效甲板 因為戰艦之間至少會有乙個空位將它們分開。高階 你可以用一次掃瞄演算法,只使用o 1 額外空間,並且不修改甲板...
LeetCode 甲板上的戰艦
給定乙個二維的甲板,請計算其中有多少艘戰艦。戰艦用 x 表示,空位用 表示。你需要遵守以下規則 給你乙個有效的甲板,僅由戰艦或者空位組成。戰艦只能水平或者垂直放置。換句話說,戰艦只能由 1xn 1 行,n 列 組成,或者 nx1 n 行,1 列 組成,其中n可以是任意大小。兩艘戰艦之間至少有乙個水平...
近期的工作成果《帝國戰艦》
最近3個多月一直在做flash小遊戲 帝國戰艦 主要是為參加麻球flash大賽。現在大體功能基本完成,很多遊戲性的東西還沒有加入,時間不夠了。只能先把作品提交了。ai steering程式設計 一.建立機車 ai steering程式設計 二.尋找行為 http bbs.9ria.com threa...