LeetCode 419. Battleships in a Board 题解(C++)

项目二:用C++做一个战舰游戏 project(battleships) set(CMAKE_CXX_STANDARD 11) add_executable(battleships battleships.cpp player.h player.cpp) #include"player.h" int main(){ // std::array<std::array<int,10>10> gri... 阅读详情

LeetCode 419. Battleships in a Board 题解(C++)


题目描述

  • Given an 2D board, count how many different battleships are in it. The battleships are represented with ‘X’s, empty slots are represented with ‘.’s. You may assume the following rules:
  • You receive a valid board, made of only battleships or empty slots.
  • Battleships can only be placed horizontally or vertically. In other words, they can only be made of the shape 1xN (1 row, N columns) or Nx1 (N rows, 1 column), where N can be of any size.
  • At least one horizontal or vertical cell separates between two battleships - there are no adjacent battleships.

举例

  • Example:
    X..X
    …X
    …X
    In the above board there are 2 battleships.
  • Invalid Example:
    …X
    XXXX
    …X
    This is not a valid board - as battleships will always have a cell separating between them.

思路

  • 这里需要计算战舰队的数量count,可转换为计算每个战舰队位于最左上角的船只(我们称为战舰队头)。
  • 用两个循环,对网格内的每一个格子进行遍历,若该格子为X(即有战舰),则分以下几种情况:
    若在网格的最左上角(即i=0,j=0),则存在一个舰队,count自加1;
    若在网格的最上角(即i=0),但不在最左边(即j!=0),则需要判断该位置的左边(即board[i][j-1])是否有战舰存在,若其左边不存在战舰,则该位置为战舰队头,count自加1;
    若在网格的最左边(即j=0),但不在最上边(即i!=0),则需要判断该位置的上面(即board[i-1][j])是否有战舰存在,若其上面不存在战舰,则该位置为战舰队头,count自加1;
    若战舰不在最左边也不在最上边(即i!=0且j!=0),则需要判断该战舰的左边和上面是否还有战舰存在,若其左边和上面都不存在战舰,则该位置为战舰队头,count自加1;
    其余情况,战舰都不属于战舰队头。

代码

class Solution 
{
public:
    int countBattleships(vector<vector<char>>& board)
    {
        int count = 0;
        int row = board.size();
        int column = board[0].size();
        for (int i = 0; i < row; ++i)
        {
            for (int j = 0; j < column; ++j)
            {
                if (board[i][j] == 'X')
                {
                    if (i == 0 && j == 0)
                    {
                        ++count;
                    }
                    else if (i == 0 && board[i][j - 1] != 'X')
                    {
                        ++count;
                    }
                    else if (j == 0 && board[i - 1][j] != 'X')
                    {
                        ++count;
                    }
                    else if (i != 0 && j != 0 && board[i][j - 1] != 'X' && board[i - 1][j] != 'X')
                    {
                        ++count;
                    }
                }
            }
        }
        return count;
    }
};
BattleshipMiniProject #BattleshipMiniProject 立即下载

相关推荐

Matlab:常见涡旋光束仿真

代码: clc clear all close all %% 环形涡旋光束 N = 200; lambda = 632e-9; %波长为632nm k = 2*pi/lambda; %波数 w0 = 3; %束腰半径 x = linspace(-10,10,N); y = linspace(-10,10,N); [X,Y] = meshgrid(x,y); [t...

zzz997的博客 3万+

LeetCode每日一题 | 419 | 甲板上的战舰 |二维数组遍历

✨今天给大家带来的是LeetCode上的第419题——甲板上的战舰(✨。这道题目是一个经典的二维数组遍历问题,要求我们在一个棋盘中找到所有的战舰。接下来给大家详细讲解一下解题思路和主要的数据结构哦~🥳。

PAIN的博客 551

【ComfyUI】多模型 户型图风格渲染效果图

本文介绍了一种基于ComfyUI的室内户型图自动渲染工作流,将平面图转换为风格化效果图。该工作流通过RH_Captioner节点识别空间布局,结合Qwen2.5模型优化文本描述,再使用定制室内设计模型生成渲染图。整个流程包含图像输入、空间识别、文本组织、语言生成、风格转换和渲染输出等9个阶段,各节点协同完成从户型图到效果图的全自动转换。系统融合了语言理解和图像生成技术,可广泛应用于室内设计、装修可视化等领域。

Mr数据杨 3011

419. Battleships in a Board(C++)

原題 Given an 2D board, count how many battleships are in it. The battleships are represented with 'X's, empty slots are represented with '.'s. You may assume the following rules: You receive

qq_33469427的博客 289

基于FPGA的万兆以太网学习(1)

万兆(10G) 以太网测速视频:SFP+屏蔽笼可以插入千兆或万兆光模块。SFP+信号定义与 SFP 一致。

baidu_34971492的博客 2250

解锁RK1126与SC132GS摄像头适配密码:技术与代码全解析

本文详细介绍了瑞芯微RK1126芯片与SC132GS摄像头的适配方法。首先分析了RK1126的四核Cortex-A7处理器、Mali-T860 GPU等硬件特性,以及SC132GS的130万像素、全局快门等技术参数。重点阐述了基于MIPI CSI接口的硬件连接原理和基于V4L2框架的软件驱动设计,并提供了完整的初始化、数据采集和图像处理代码实现。针对常见连接和图像质量问题给出了解决方案,展现了该组合在智能安防、工业检测等领域的应用潜力,为开发者提供了实用的技术参考。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 1503

题解——Leetcode 419. Battleships in a Board 难度:Medium

Given an 2D board, count how many battleships are in it. The battleships are represented with'X's, empty slots are represented with '.'s. You may assume the following rules: You receive a valid bo

dxk3881345的博客 288

PLC为西门子的S7-1200,舵机为 DS3218,PLC控制舵机旋转程序实现?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 999

leetcode 419 Battleships in a Board C++

好久不刷leetcode了,因为找了个还比较满意的实习,今天突然上来发现C++都不会写了。。。还是要保持手感呐。 这道题第一思路就是DFS,然而它给了两个要求,一个是不能改变board,第二是只用O(1)的额外空间。 先说下修改board的吧。 找到一个X之后用DFS把周围的全部变成‘.’就可以了。 符合条件的解法是找到X且上边和右边都没有X,很巧妙。 代码如下,注意边界,不然就cras

wcxdell的专栏 815

基于 YOLOv26 的遥感图像目标检测系统:从原理到模型

本文介绍了基于YOLOv26的遥感图像目标检测系统。YOLOv26凭借端到端设计、轻量化架构和小目标优化能力,有效解决了遥感图像中多尺度目标、复杂背景、小目标检测等挑战。系统采用CSPDarknet骨干网络和FPN+PAN特征融合模块,通过MuSGD优化器和改进损失函数提升训练效果。文章详细阐述了数据预处理、模型训练流程和优化技巧,包括Tile推理和混合精度训练。系统支持多种部署方式,在CPU上推理速度提升43%,能实现高精度、实时性的遥感目标检测,适用于城市规划、农业监测等场景。

一键难忘的博客 568

2026年瑞芯微数字IC设计笔试试卷带答案

本文主要考察数字集成电路设计相关知识,包括低功耗设计、时序分析、跨时钟域处理、总线协议等内容。试题分为单选题、多选题、代码设计题和简答题四部分。 单选题涉及门控时钟降低动态功耗、静态时序分析的限制、跨时钟域同步方案、时序违例修复方法、AHB总线信号、异步FIFO设计、半导体工艺电阻特性、二进制数转换、同步/异步复位比较以及分频电路设计等知识点。 多选题重点考查动态功耗优化技术、亚稳态特性、异步FIFO设计规范、Verilog可综合代码编写要求以及AXI总线协议特点等。 代码设计题要求实现一个同步FIFO和3

Open 215

【LeetCode】419. Battleships in a Board 解题报告(Python & C++)

【LeetCode】419. Battleships in a Board 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://leetcode.com/problems/battleships-in-a-board/description/ 题目描述: Given an 2D board, count how many battleships...

负雪明烛 1613

js逆向实战:爬取淘宝男装商品

本文介绍了一个淘宝商品数据爬取程序的技术实现方案。该程序通过分析淘宝H5页面接口,实现了商品名称、价格、销量等关键信息的抓取,并支持图片下载功能。核心内容包括:1. 使用Request库发送HTTP请求获取数据;2. 通过逆向分析淘宝的签名算法(MD5加密)生成合法请求;3. 解析JSON数据并提取商品信息;4. 处理分页参数实现多页数据爬取;5. 将数据保存为CSV文件并下载商品图片。程序还实现了反爬虫绕过、错误处理、文件管理等辅助功能,完整展示了从数据采集到存储的全过程。

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 1573

leetcode419

种子填充419 class Solution { private: int dx[4] = {0,-1,0,1}; int dy[4] = {-1,0,1,0}; public: void dfs(vector<vector<char>>& board,int r,int c) { board[r][c]...

剑似生平 274

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

LeetCode 419. 甲板上的战舰(C、C++、python)

给定一个二维的甲板, 请计算其中有多少艘战舰。 战舰用 'X'表示,空位用 '.'表示。 你需要遵守以下规则: 给你一个有效的甲板,仅由战舰或者空位组成。 战舰只能水平或者垂直放置。换句话说,战舰只能由 1xN (1 行, N 列)组成,或者 Nx1 (N 行, 1 列)组成,其中N可以是任意大小。 两艘战舰之间至少有一个水平或垂直的空位分隔 - 即没有相邻的战舰。 示例 : X..X ...

qq_27060423的博客 477

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【Lintcode】986. Battleships in a Board

题目地址: https://www.lintcode.com/problem/battleships-in-a-board/description 给定一个二维矩阵,含.和X两种字符。任何一个1×N1\times N1×N或者N×1N × 1N×1的X组成的行或列视为一个“战舰”。问一共有多少个战舰。题目保证战舰与战舰之间是有一个空行或者空列的。 遍历矩阵,注意,每个战舰我们只计数其最左上角的X,这样就能保证不重不漏。代码如下: public class Solution { /** *

数学、算法爱好者的博客 223

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

leetcode 419

此题技巧题,可以通过试试几个简单的例子,能够发现结果。我们记录X出现的总次数,然后记录X四周出现的X的数目,可以发现结果就是count-repeat/2,附代码,(emmmmm果然python和C++,C#,java 这些语言没啥区别) class Solution:     def countBattleships(self, board):         """         :type...

bengepai的博客 304

[LeetCode] 419. Battleships in a Board 解题报告

Given an 2D board, count how many battleships are in it. The battleships are represented with 'X's, empty slots are represented with'.'s. You may assume the following rules: You receive a valid b

萌萌小七的专栏 654

[Leetcode] 419. Battleships in a Board 解题报告

题目: Given an 2D board, count how many battleships are in it. The battleships are represented with 'X's, empty slots are represented with '.'s. You may assume the following rules: You receive

魔豆(Magicbean)的博客 378

每日一题(4.24-5.1)

目录4.27-C Mini Battleship—递归回溯4.26-I Letter Wheels—预处理标记+枚举4.25-F Hopscotch—暴力枚举4.24-D. Explorer Space—记忆化搜索orDP 4.27-C Mini Battleship—递归回溯 来源:2021年度训练联盟热身训练赛第六场——C Mini Battleship 最大55的图,最多有5支战舰队,战舰队是1a【k】的矩形,即占据水平的a【k】个长度单位或者竖直a【k】个长度单位,给定的图中“X”处不能放置战舰,

自伤无色的博客 676

Leetcode题解:419. Battleships in a Board

Leetcode题解:419. Battleships in a Board难度:Medium

Littlecuter的博客 493

Leetcode 419. 甲板上的战舰 C++

Leetcode 419. 甲板上的战舰 题目 给定一个二维的甲板, 请计算其中有多少艘战舰。 战舰用 'X’表示,空位用 '.'表示。 你需要遵守以下规则: 给你一个有效的甲板,仅由战舰或者空位组成。 战舰只能水平或者垂直放置。换句话说,战舰只能由 1xN (1 行, N 列)组成,或者 Nx1(N 行, 1 列)组成,其中N可以是任意大小。 两艘战舰之间至少有一个水平或垂直的空位分隔 - 即没有相邻的战舰。 测试样例 示例 : X..X ...X ...X 在上面的甲板中有2艘战舰。 无效样例 :

weixin_43750513的博客 243

LeetCode 419. Battleships in a Board 解题报告

LeetCode 419. Battleships in a Board 解题报告

骆小坑的填坑之旅 5586

【leetcode】419. Battleships in a Board(C++ & Python)

419. Battleships in a Board题目链接419.1 题目描述:Given an 2D board, count how many battleships are in it. The battleships are represented with ‘X’s, empty slots are represented with ‘.’s. You may assume the f

I am what i am 607

2018/12/14周五集训队第九次测试赛补题题解

A - Paper Airplanes CodeForces - 965A (数学) 先算出每个人要用几张纸,然后再算出总共要用几张纸,然后计算用多少包纸 代码 #include <bits/stdc++.h> using namespace std; typedef long long ll; int main() { ios::sync_with_stdio(0); cin...

weixin_30693183的博客 256
上一篇: LeetCode 343. Integer Break 题解(C++)
下一篇: LeetCode 387. First Unique Character in a String 题解(C++)
prayyojay
博客等级 码龄10年 4粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值