Given an 2D board, count how many battleships are in it. The battleships are rePResented with 'X's, empty slots are represented with '.'s. You may assume the following rules:
1xN (1 row, N columns) or Nx1 (N rows, 1 column), where N can be of any size.At least one horizontal or vertical cell separates between two battleships - there are no adjacent battleships.Example:
X..X...X...XIn the above board there are 2 battleships.Invalid Example:
...XXXXX...XThis is an invalid board that you will not receive - as battleships will always have a cell separating between them.
思路:
簡單的思路是做搜索。但是考慮到每個船和每個船之間至少橫向縱向有一個空格,那么如果只考慮每艘船的右下角:
XX.X...X這樣的話,右下角的X右邊和下面都是空格,每次碰到符合這個條件的X就認(rèn)為碰到一個船,否則不管。
題解:
int countBattleships(const std::vector<std::vector<char>>& board) { const int M = board.size(); const int N = board[0].size(); int numShips(0); for(int i = 0; i < M; ++i) { for(int j = 0; j < N; ++j) { if (board[i][j] == 'X') { numShips += ((i < M - 1 && board[i + 1][j] == '.') || (i == M - 1)) && ((j < N - 1 && board[i][j + 1] == '.') || (j == N - 1)); } } } return numShips;}
新聞熱點(diǎn)
疑難解答
圖片精選