419. Battleships in a Board

算船的,横着的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;
    }
}
posted @ 2016-10-16 04:57  哇呀呀..生气啦~  阅读(667)  评论(0编辑  收藏  举报