Leetcode 419. 甲板上的战舰
给你一个大小为 m x n 的矩阵 board 表示甲板,其中,每个单元格可以是一艘战舰 ‘X’ 或者是一个空位 ‘.’ ,返回在甲板 board 上放置的 战舰 的数量。
战舰 只能水平或者垂直放置在 board 上。换句话说,战舰只能按 1 x k(1 行,k 列)或 k x 1(k 行,1 列)的形状建造,其中 k 可以是任意大小。两艘战舰之间至少有一个水平或垂直的空位分隔 (即没有相邻的战舰)。
扫描整个矩阵。遇到战舰,就判断它所在的一行/列连续的是否还有其他战舰,遇到战舰就把设置为已经扫描过的。
先扫描行还是先扫描列都可以,但是,如果扫描行的时候后面有连续的组成战舰,就不能再扫描列了。
避免出现以下情况少算了了。
完整代码
class Solution {
public int countBattleships(char[][] board) {
int res = 0;
int m = board.length;
int n = board[0].length;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (board[i][j] == 'X') {
res++;
board[i][j] = '.';
// 列
if (((i + 1) < m) && (board[i + 1][j] == 'X')) {
int t = i + 1;
while (t < m && board[t][j] == 'X') {
board[t][j] = '.';
t++;
}
continue;
}
// 行
if (((j + 1) < n) && (board[i][j + 1] == 'X')) {
int t = j + 1;
while (t < n && board[i][t] == 'X') {
board[i][t] = '.';
t++;
}
continue;
}
}
}
}
return res;
}
}