419. 甲板上的战舰

1. 题号和题目名称

  1. 甲板上的战舰

2. 题目叙述

给定一个二维的甲板, 请计算其中有多少艘战舰。 战舰用 'X' 表示,空位用 '.' 表示。 你需要遵守以下规则:

  1. 给你一个有效的甲板,由只包含 'X''.' 的二维数组组成。
  2. 战舰只能水平或者垂直放置。换句话说,战舰只能由 1 x k1 行,k 列)或 k x 1k 行,1 列)的形状组成,其中 k 可以是任意大小。
  3. 两艘战舰之间至少有一个水平或垂直的空位分隔 - 即没有相邻的战舰。

示例

输入:
[["X",".",".","X"],
 [".",".",".","X"],
 [".",".",".","X"]]
输出:2
解释:在上面的甲板中有 2 艘战舰。

3. 模式识别

本题可以通过深度优先搜索(DFS)或简单的计数方法来解决。由于战舰之间有间隔,我们可以通过遍历二维数组,当遇到 'X' 时,判断它是否是战舰的左上角(即其上方和左方都不是 'X'),如果是,则表示发现了一艘新的战舰。

4. 考点分析

  • 二维数组遍历:需要遍历整个二维数组来检查每个元素。
  • 条件判断:根据战舰的规则,判断每个 'X' 是否是新战舰的一部分。

5. 所有解法

  • 计数法:遍历二维数组,通过判断 'X' 的位置来计数战舰数量,这是最优解法。
  • 深度优先搜索(DFS):当遇到 'X' 时,进行深度优先搜索标记整个战舰,然后计数战舰数量。

6. 最优解法(计数法)的 C 语言代码

#include <stdio.h>

// 计算甲板上战舰的数量
int countBattleships(char*
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

请向我看齐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值