要求以此遍歷並且不修改原數組的條件下:
- 每個戰艦不相鄰,正常情況下,我們找到頭部,然後向下或者向右比哪裏數組,修改數組,去除戰艦,然後遍歷下一個。
- 發現,只需要遍歷發現頭部即可,最左邊或者最上邊X就是一個戰艦。如果此刻位置的上邊或者左邊是X,則是戰艦的中部。
//419.
int countBattleships(vector<vector<char>>& board) {
const int n = board.size();
if (n == 0)return 0;
const int m = board[0].size();
if (m == 0)return 0;
int result = 0;
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;
++result;
}
}
return result;
}