要求以此遍历并且不修改原数组的条件下:
- 每个战舰不相邻,正常情况下,我们找到头部,然后向下或者向右比哪里数组,修改数组,去除战舰,然后遍历下一个。
- 发现,只需要遍历发现头部即可,最左边或者最上边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;
}
本文介绍了一种在不修改原始数组的条件下,高效遍历并计算战舰数量的算法。通过判断当前元素是否为战舰的头部,即最左侧或最上方的'X',来避免重复计数。

134

被折叠的 条评论
为什么被折叠?



