首页 > 代码库 > LeetCode "419. Battleships in a Board"

LeetCode "419. Battleships in a Board"

The follow-up question is fun: "Could you do it in one-pass, using only O(1) extra memory and without modifying the value of the board?"

When we meet an ‘X‘, we need to check if it is vertical or horizontal: they will never happen at the same time, by problem statement. For horizontal, we simply stripe through right, and plus 1 - however, if our top element is ‘X‘ already, it is a vertical and counter has alread been increased.

class Solution {public:    int countBattleships(vector<vector<char>>& board) {        int h = board.size();        if (!h) return 0;        int w = board[0].size();        if (!w) return 0;                int cnt = 0;        for(int i = 0; i < h; i ++)        for(int j = 0; j < w; j ++)        {            if(board[i][j] == X)             {                // is it a counted vertical case?                if(!(i > 0 && board[i -1][j] == X))                {                    cnt ++;                    // Horizontal                    while(j < (w - 1) && board[i][j + 1] == X) j ++;                }            }        }                return cnt;    }};

LeetCode "419. Battleships in a Board"