ke
1. 可以用BFS染色法
2. 可以在二维枚举的时候在上下左右枚举船
3. 由于两艘船之间一定有空格,因此在枚举的时候从上到下,从左到右,如果上面或者左边有部位,就说明这是船的一部分,不即数,否则就计数。这种方法不改变原来的board,同时时间复杂度也是O(n^3)
class Solution {
public:
int countBattleships(vector<vector<char>>& board) {
int row = board.size();
int col = board[0].size();
int ans = 0;
for (int i = 0; i < row; ++i) {
for (int j = 0; j < col; ++j) {
if (board[i][j] == 'X') {
if (i > 0 && board[i - 1][j] == 'X') {
continue;
}
if (j > 0 && board[i][j - 1] == 'X') {
continue;
}
ans++;
}
}
}
return ans;
}
};