clueless coding // TODO: be smarter

LeetCode 419. Battleships in a Board: C++ Solution



Problem Statement


Given an 2D board, count the total number of battleships on it.

Battleships are represented by ‘X’s,

Board slots without a battleship are represented by ‘.’s.

Assume that you have a valid board. Every spot is empty or contains a battleship.

Battleships can only be placed vertically or horizontally.

No two battleships are adjacent. Assume there’s at least one space between each battleship.

Function Signature (C++):
  int countBattleships(vector<vector<char>>& board)

Inputs:
X..X
...X
...X

Outputs:
  2

Inputs:
...X
XXXX
...X

Invalid board - adjacent battleships.



TL;DR Code Solution


bool isTopLeft(vector<vector<char>>& board, int i, int j) {

    bool leftMost = false;
    if (i == 0 || board[i-1][j] == '.') {
        leftMost = true;
    }

    bool topMost = false;
    if (j == 0 || board[i][j-1] == '.') {
        topMost = true;
    }

    return leftMost && topMost;

}

int countBattleships(vector<vector<char>>& board) {

    int result = 0;

    for (int i = 0; i < board.size(); i++) {
        for (int j = 0; j < board[0].size(); j++) {
            if (board[i][j] == 'X' && isTopLeft(board, i, j)) {
                result++;
            }
        }
    }

    return result;

}