add: leetcode 419 readme

This commit is contained in:
Don2025
2022-07-02 13:44:55 +08:00
parent b700ceafc1
commit 3f0ef3a415

View File

@ -0,0 +1,51 @@
# [419. Battleships in a Board](https://leetcode.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:**
![img](https://assets.leetcode.com/uploads/2021/04/10/battelship-grid.jpg)
```c
Input: board = [["X",".",".","X"],[".",".",".","X"],[".",".",".","X"]]
Output: 2
```
**Example 2:**
```c
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 × n`的矩阵 称之为甲板,矩阵单元格中的`'X'`表示战舰,`'.'`表示空位。
战舰只能水平或竖直摆放在甲板上(换句话说,可以理解为联通的同一行`'X'`或同一列`'X'`只算作一个“战舰群”),任意俩个“战舰群”间都是不相邻的。返回甲板上“战舰群”的数量。
## 解题思路
题目进阶要求一次扫描算法,空间复杂度为`O(1)`,且不能修改矩阵中的值。
因为题目中给定的两个“战舰群”间至少有一个水平或垂直的空位分隔,所以可以通过枚举每个战舰的左上顶点即可统计“战舰群”的个数。
假设当前遍历到矩阵中`'X'`的位置为`(i, j)`,即 `board[i][j]='X'`。如果当前战舰属于一个新的“战舰群”,则需要满足以下条件:
- 当前位置的上方位为空,即 `board[i-1][j]='.'`
- 当前位置的左方位为空,即 `board[i][j-1]='.'`
统计出所有左方位和上方位为空的战舰个数,即可得到“战舰群”的数量。