算船的,横着的X或者竖着的X算一条船,然后不会出现
x x
x
这种情况,X只能水平延伸或者纵向延伸……
用一个ARRAY记录上一行情况:
是X的话就说明当前这行的该位置肯定不是X。
不是X的话,如果当前是X,再看他左边是不是边界或者.,其中之一说明发现了一条船,否则只是上一条船的一部分。。
然后根据.的情况更新这一行以便下一行使用。
其实我没弄懂这个题的意思,没有TAG。。感觉正解应该不是这种naive approach..
public class Solution
{
public int countBattleships(char[][] board)
{
if(board.length == 0) return 0;
int res = 0;
int[] prev = new int[board[0].length];
for(int i = 0; i < board.length;i++)
{
for(int j = 0; j < prev.length;j++)
{
if(prev[j]==0)
{
if(board[i][j] == 'X')
{
prev[j] = 1;
if(j == 0 || board[i][j-1] != 'X') res++;
}
else prev[j] = 0;
}
else
{
if(board[i][j] == 'X') prev[j] = 1;
else prev[j] = 0;
}
}
}
return res;
}
}