文章目录

  • 一【题目类别】
  • 二【题目难度】
  • 三【题目编号】
  • 四【题目描述】
  • 五【题目示例】
  • 六【解题思路】
  • 七【题目提示】
  • 八【题目进阶】
  • 九【时间频度】
  • 十【代码实现】
  • 十一【提交结果】

一【题目类别】

  • 深度优先搜索

二【题目难度】

  • 中等

三【题目编号】

  • 419.甲板上的战舰

四【题目描述】

  • 给你一个大小为 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

六【解题思路】

  • 本题可以用深度优先搜索直接解决,比较简单,但是在这里提供一种比较巧妙地解法:
  • 通过分析题目我们可以发现,每个战舰之间都要么上下隔着海水,要么左右隔着海水,也就是没有相邻的战舰,并且战舰要么都是横着的,要么都是竖着的,所以每个战舰的开头的左面和上面一定是都是海水,那么我们只需要搜索每艘战舰的开头就行了:
    • 如果当前位置是’X’
    • 并且其左边和右边都是’.',说明这就是一艘战舰的起始位置,数量加一
  • 计算得到多少战舰的开头,就能得到战舰的数量
  • 最后返回结果即可

七【题目提示】

  • m = = b o a r d . l e n g t h m == board.length m==board.length
  • n = = b o a r d [ i ] . l e n g t h n == board[i].length n==board[i].length
  • 1 < = m , n < = 200 1 <= m, n <= 200 1<=m,n<=200
  • b o a r d [ i ] [ j ] 是 ′ . ′ 或 ′ X ′ board[i][j] 是 '.' 或 'X' board[i][j]是′.′或′X′

八【题目进阶】

  • 你可以实现一次扫描算法,并只使用 O ( 1 ) O(1) O(1) 额外空间,并且不修改 board 的值来解决这个问题吗?

九【时间频度】

  • 时间复杂度: O ( m ∗ n ) O(m*n) O(m∗n),其中 m , n m,n m,n分别为传入的图的行和列
  • 空间复杂度: O ( 1 ) O(1) O(1)

十【代码实现】

  1. Java语言版
class Solution {public int countBattleships(char[][] board) {int m = board.length;int n = board[0].length;int count = 0;for(int i = 0;i<m;i++){for(int j = 0;j<n;j++){if((board[i][j] == 'X') && (i == 0 || board[i - 1][j] == '.') && (j == 0 || board[i][j - 1] == '.')){count++;}}}return count;}
}
  1. C语言版
int countBattleships(char** board, int boardSize, int* boardColSize)
{int m = boardSize;int n = boardColSize[0];int count = 0;for(int i = 0;i<m;i++){for(int j = 0;j<n;j++){if((board[i][j] == 'X') && (i == 0 || board[i - 1][j] == '.') && (j == 0 || board[i][j - 1] == '.')){count++;}}}return count;
}
  1. Python语言版
class Solution:def countBattleships(self, board: List[List[str]]) -> int:m = len(board)n = len(board[0])count = 0for i in range(0,m):for j in range(0,n):if (board[i][j] == 'X') and (i == 0 or board[i - 1][j] == '.') and (j == 0 or board[i][j - 1] == '.'):count+=1return count
  1. C++语言版
class Solution {public:int countBattleships(vector<vector<char>>& board) {int m = board.size();int n = board[0].size();int count = 0;for(int i = 0;i<m;i++){for(int j = 0;j<n;j++){if((board[i][j] == 'X') && (i == 0 || board[i - 1][j] == '.') && (j == 0 || board[i][j - 1] == '.')){count++;}}}return count;}
};

十一【提交结果】

  1. Java语言版

  2. C语言版

  3. Python语言版

  4. C++语言版

【LeetCode每日一题】——419.甲板上的战舰相关推荐

  1. LeetCode 419. 甲板上的战舰

    1. 题目 给定一个二维的甲板, 请计算其中有多少艘战舰. 战舰用 'X'表示,空位用 '.'表示. 你需要遵守以下规则: 给你一个有效的甲板,仅由战舰或者空位组成. 战舰只能水平或者垂直放置. 换句 ...

  2. leetcode 419. Battleships in a Board | 419. 甲板上的战舰(二维矩阵DFS经典“感染”思路)

    题目 https://leetcode.com/problems/battleships-in-a-board/ 题解 一道简单的 medium 题,仍然是"感染"的思想,只不过本 ...

  3. 419. 甲板上的战舰

    给定一个二维的甲板, 请计算其中有多少艘战舰. 战舰用 'X'表示,空位用 '.'表示. 你需要遵守以下规则: 给你一个有效的甲板,仅由战舰或者空位组成. 战舰只能水平或者垂直放置.换句话说,战舰只能 ...

  4. Leetcode_Python 419 甲板上的战舰

    解题思路 可以通过战舰的头来判断个数,当一个点上面或者左面试X说明它战舰中间部分. 将模型分为三个部分分析即可. 代码 class Solution(object):def countBattlesh ...

  5. 【LeetCode每日一题】1723. 完成所有工作的最短时间

    [LeetCode每日一题]1723. 完成所有工作的最短时间 [1] 1723. 完成所有工作的最短时间 [2] 473. 火柴拼正方形 [1] 1723. 完成所有工作的最短时间 题目: 给你一个 ...

  6. leetcode每日一题--雀巢原理;抽屉算法;Quorum机制;分布式应用

    leetcode每日一题 539. 最小时间差 示例 1: 输入:timePoints = ["23:59","00:00"] 输出:1 示例 2: 输入:ti ...

  7. LeetCode每日一题——904. 水果成篮

    LeetCode每日一题系列 题目:904. 水果成篮 难度:普通 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 你正在探访一家农场,农场从左到右种植了一排果树.这些树用一个整 ...

  8. LeetCode每日一题打卡组队监督!刷题群!

    近 2000 人已经加入共同刷题啦! 群友每天都会在群里给大家讲解算法题 每周日「负雪明烛」组织直播讲题 我相信来看我博客的大部分人都是通过LeetCode刷题过来的.最近发现LeetCode中文网站 ...

  9. 【LeetCode每日一题】810. 黑板异或游戏

    [LeetCode每日一题]810. 黑板异或游戏 题目: 黑板上写着一个非负整数数组 nums[i] .Alice 和 Bob 轮流从黑板上擦掉一个数字,Alice 先手.如果擦除一个数字后,剩余的 ...

最新文章

  1. 零基础学C++进腾讯,这份GitHub热榜的「从入门到高薪」请你收下
  2. UIKit框架使用总结--看看你掌握了多少
  3. 泛型算法----概述,初识泛型算法,定制操作
  4. 使用selenium控制滚动条(非整屏body)
  5. spring cloud+dotnet core搭建微服务架构:服务发现(二)
  6. 容器环境自建数据库、中间件一键接入阿里云 Prometheus 监控
  7. Python机器学习库scikit-learn实践
  8. 项目中AOP的使用-读写分离
  9. 845. 数组中的最长山脉
  10. bootstrap基础样式学习(二)——栅格
  11. JSCore浅析及其在iOS上的使用
  12. win7 NVMe驱动 SSD固态硬盘 补丁 免重装 DISM++ Windows6.1-KB3087873-v2-x64.msu
  13. win10计算机切换用户,win10账户切换,详细教您win10怎么切换账户
  14. 当tomcat启动遇到(你的项目名字) is required and cannot be removed from the server(不能部署到server上)
  15. Excel自动求和-乘法
  16. 将Visual Leak Detector集成至Visual Studio 2019
  17. Win10多台电脑时间自动同步
  18. vue预览word,excel,pptx,pdf文件
  19. lucene java 庖丁解牛_Lucene分词器之庖丁解牛
  20. 深入浅出傅里叶变换(目前看到的讲得最好的一篇文章)

热门文章

  1. 【Android App】获取照片里的位置信息及使用全球卫星导航系统(GNSS)获取位置实战(附源码和演示 超详细)
  2. 理解OSRM(4)-MLD算法总览
  3. 多模块项目依赖注入失败Field xxRepository in xxImpl required a bean of type xxRepository that could not be found
  4. Windows批量复制文件copy命令bat批处理文件
  5. python缩写词_在Python中查找和组合首字母缩略词
  6. arxiv Access Denied 权限问题禁止下载解决方案
  7. 黑牛外汇交易系统2007年12月17日做单记录
  8. 汽车标定知识整理(一):标定简介与CCP报文协议简介
  9. android自动获取天气,android通过google api获取天气信息示例
  10. d3 - 建立力引导图将知识图谱可视化 (一)