419.甲板上的战舰
题目描述
思路
遍历扫描
要求找到战舰的数量,可以遍历矩阵中单色每个位置(i, j),且满足board[i][j] = ‘X’,并将以(i, j)为起点的战舰的所有位置均设置为空。从而就可以统计出所有可能的战舰。
Java实现
class Solution {
public int countBattleships(char[][] board) {
int row = board.length;
int col = board[0].length;
int ans = 0;
for (int i = 0; i < row; ++i) {
for (int j = 0; j < col; ++j) {
if (board[i][j] == 'X') {
board[i][j] = '.';
for (int k = j + 1; k < col && board[i][k] == 'X'; ++k) {
board[i][k] = '.';
}
for (int k = i + 1; k < row && board[k][j] == 'X'; ++k) {
board[k][j] = '.';
}
ans++;
}
}
}
return ans;
}
}
Python实现
class Solution:
def countBattleships(self, board: List[List[str]]) -> int:
ans = 0
m, n = len(board), len(board[0])
for i, row in enumerate(board):
for j, ch in enumerate(row):
if ch == 'X':
row[j] = '.'
for k in range(j + 1, n):
if row[k] != 'X':
break
row[k] = '.'
for k in range(i + 1, m):
if board[k][j] != 'X':
break
board[k][j] = '.'
ans += 1
return ans