连着的横着的或者竖着的x就是一艘船,每两艘不会连着,
比如它给的
x . . x
. . . x
. . . x
这个左面的x是一艘,右面的三个x是一艘,然后
. . .x
xxxx
. . .x
这样的不会给你,因为中间的左3个x和右边的竖三个x挨起来了,它不会给你挨起来的船。
. . . x
. . . x
这个左面的x是一艘,右面的三个x是一艘,然后
. . .x
xxxx
. . .x
这样的不会给你,因为中间的左3个x和右边的竖三个x挨起来了,它不会给你挨起来的船。
所以一种比较简单的办法,数一共多少个船头,一个x,是船头的话,它的左边和上边要不是边界,要不就是"."。代码如下:
class Solution {
public:
int countBattleships(vector<vector<char>>& board) {
int sum=0;
int y=board.size();
for(int i=0;i<y;i++)
{
int x=board[i].size();
for(int j=0;j<x;j++)
{
if(board[i][j]=='X')
{
if((i<1||board[i-1][j]=='.')&&(j<1||board[i][j-1]=='.'))
{
sum++;
}
}
}
}
return sum;
}
};