原文链接: https://leetcode-cn.com/problems/battleships-in-a-board
英文原文
Given an m x n
matrix board
where each cell is a battleship 'X'
or empty '.'
, return the number of the battleships on board
.
Battleships can only be placed horizontally or vertically on board
. In other words, they can only be made of the shape 1 x k
(1
row, k
columns) or k x 1
(k
rows, 1
column), where k
can be of any size. At least one horizontal or vertical cell separates between two battleships (i.e., there are no adjacent battleships).
Example 1:
Input: board = [["X",".",".","X"],[".",".",".","X"],[".",".",".","X"]] Output: 2
Example 2:
Input: board = [["."]] Output: 0
Constraints:
m == board.length
n == board[i].length
1 <= m, n <= 200
board[i][j]
is either'.'
or'X'
.
Follow up: Could you do it in one-pass, using only O(1)
extra memory and without modifying the values board
?
中文题目
给你一个大小为 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'
进阶:你可以实现一次扫描算法,并只使用 O(1)
额外空间,并且不修改 board
的值来解决这个问题吗?
通过代码
高赞题解
思路:
我们可以通过战舰的头来判断个数,当一个点上面或者左面试X
说明它战舰中间部分,跳过即可!
代码:
class Solution:
def countBattleships(self, board: List[List[str]]) -> int:
row = len(board)
col = len(board[0])
res = 0
for i in range(row):
for j in range(col):
if board[i][j] == ".": continue
if i > 0 and board[i - 1][j] == "X": continue
if j > 0 and board[i][j - 1] == "X": continue
res += 1
return res
统计信息
通过次数 | 提交次数 | AC比率 |
---|---|---|
13175 | 17472 | 75.4% |
提交历史
提交时间 | 提交结果 | 执行时间 | 内存消耗 | 语言 |
---|