题目描述
给你一个大小为 m x n 的矩阵 board 表示甲板,其中,每个单元格可以是一艘战舰 ‘X’ 或者是一个空位 ‘.’ ,返回在甲板 board 上放置的 战舰 的数量。
战舰 只能水平或者垂直放置在 board 上。换句话说,战舰只能按 1 x k(1 行,k 列)或 k x 1(k 行,1 列)的形状建造,其中 k 可以是任意大小。两艘战舰之间至少有一个水平或垂直的空位分隔 (即没有相邻的战舰)。
示例 1:
输入:board = [["X",".",".","X"],[".",".",".","X"],[".",".",".","X"]]
输出:2
示例 2:
输入:board = [["."]]
输出:0
提示:
- m == board.length
- n == board[i].length
- 1 <= m, n <= 200
- board[i][j] 是 ‘.’ 或 ‘X’
题解思路
由题目可知
- 战舰只能按照行或者列的方式来进行摆放 且一行或者一列只能摆放一个战舰
- 相邻战舰之间会由空隙
- 因此我们可以遍历整个矩阵 并且将以战舰为开头的行或者列置为 . 并计数
题解代码
class Solution:
def countBattleships(self, board: List[List[str]]) -> int:
m,n=len(board),len(board[0])
ans=0
for i in range(m):
for j in range(n):
if board[i][j]=='X':
board[i][j]='.'
#以战舰为首进行列遍历
for k in range(i+1,m):
if board[k][j]!='X':
break
else:
board[k][j]='.'
#以战舰为首进行行遍历
for k in range(j+1,n):
if board[i][k]!='X':
break
else:
board[i][k]='.'
ans+=1
return ans