Cho bàn cờ 2D, đếm số tàu chiến. Tàu chiến ký hiệu 'X', ô trống '.'. Quy tắc: tàu chỉ đặt ngang hoặc dọc (1xN hoặc Nx1), ít nhất một ô ngang/dọc phân cách hai tàu. Ví dụ bàn cờ 3x4 cho kết quả 2 tàu.
Giải thuật
ans := 0,n := số hàng,m := số cột.- Duyệt từng ô
(i,j):- Nếu
board[i][j] == '.'bỏ qua. - Nếu
i > 0vàboard[i-1][j] == 'X'bỏ qua. - Nếu
j > 0vàboard[i][j-1] == 'X'bỏ qua. - Tăng
ans.
- Nếu
- Trả về
ans.
Ví dụ mã C++
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int countBattleships(vector<vector<char>>& board) {
int ans = 0;
int n = board.size(), m = board[0].size();
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++) {
if (board[i][j] == '.') continue;
if (i > 0 && board[i-1][j] == 'X') continue;
if (j > 0 && board[i][j-1] == 'X') continue;
ans++;
}
return ans;
}
};
Đầu vào
[["X",".",".","X"],[".",".",".","X"],[".",".",".","X"]]
Đầu ra
2