986. 2D战舰
给一个 2D 板, 计数上面有多少战舰. 战舰用
'X'
表示,空地用
'.'
表示。你可以假设有一下规则:
-
你会得到一个有效的板,上面只有战舰跟空地。
-
战舰只能横着或者竖着放。换句话说,它们的大小只能是 1xN (1 行, N 列) 或者 Nx1 (N 行, 1 列), N 可以是任意数。
-
在两艘战舰之间至少有一个横向的或者纵向的格子分隔 - 没有相邻的战舰
样例
样例1
输入:
X..X
...X
...X
输出: 2
解释:
在上述板上有两艘战舰。
样例2
输入:
...X
XXXX
...X
解释:
这是一个你不会得到的无效输入 - 因为战舰之间始终会有一个单元格分隔。
挑战
你可以只
遍历一遍
,并且值使用
O(1)的额外空间
且
不修改
板上的值来解决这个问题吗
public class Solution {
/**
* @param board: the given 2D board
* @return: the number of battle ships
*/
public int countBattleships(char[][] board) {
int sum=0;
for (int i = 0; i < board.length; i++) {
boolean has=true;
for (int j = 0; j < board[0].length; j++) {
if (board[i][j]=='X'){
if (has) {
if (i==0)sum++;
else {
if (board[i-1][j]=='.')sum++;
}
has=false;
}
}else {
has=true;
}
}
}
return sum;
}
}