算船的,横着的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; }}