【LeetCode每日一题】——419.甲板上的战舰
文章目录
- 一【题目类别】
- 二【题目难度】
- 三【题目编号】
- 四【题目描述】
- 五【题目示例】
- 六【解题思路】
- 七【题目提示】
- 八【题目进阶】
- 九【时间频度】
- 十【代码实现】
- 十一【提交结果】
一【题目类别】
- 深度优先搜索
二【题目难度】
- 中等
三【题目编号】
- 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)
十【代码实现】
- 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;}
}
- 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;
}
- 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
- 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;}
};
十一【提交结果】
Java语言版
C语言版
Python语言版
C++语言版
【LeetCode每日一题】——419.甲板上的战舰相关推荐
- LeetCode 419. 甲板上的战舰
1. 题目 给定一个二维的甲板, 请计算其中有多少艘战舰. 战舰用 'X'表示,空位用 '.'表示. 你需要遵守以下规则: 给你一个有效的甲板,仅由战舰或者空位组成. 战舰只能水平或者垂直放置. 换句 ...
- leetcode 419. Battleships in a Board | 419. 甲板上的战舰(二维矩阵DFS经典“感染”思路)
题目 https://leetcode.com/problems/battleships-in-a-board/ 题解 一道简单的 medium 题,仍然是"感染"的思想,只不过本 ...
- 419. 甲板上的战舰
给定一个二维的甲板, 请计算其中有多少艘战舰. 战舰用 'X'表示,空位用 '.'表示. 你需要遵守以下规则: 给你一个有效的甲板,仅由战舰或者空位组成. 战舰只能水平或者垂直放置.换句话说,战舰只能 ...
- Leetcode_Python 419 甲板上的战舰
解题思路 可以通过战舰的头来判断个数,当一个点上面或者左面试X说明它战舰中间部分. 将模型分为三个部分分析即可. 代码 class Solution(object):def countBattlesh ...
- 【LeetCode每日一题】1723. 完成所有工作的最短时间
[LeetCode每日一题]1723. 完成所有工作的最短时间 [1] 1723. 完成所有工作的最短时间 [2] 473. 火柴拼正方形 [1] 1723. 完成所有工作的最短时间 题目: 给你一个 ...
- leetcode每日一题--雀巢原理;抽屉算法;Quorum机制;分布式应用
leetcode每日一题 539. 最小时间差 示例 1: 输入:timePoints = ["23:59","00:00"] 输出:1 示例 2: 输入:ti ...
- LeetCode每日一题——904. 水果成篮
LeetCode每日一题系列 题目:904. 水果成篮 难度:普通 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 你正在探访一家农场,农场从左到右种植了一排果树.这些树用一个整 ...
- LeetCode每日一题打卡组队监督!刷题群!
近 2000 人已经加入共同刷题啦! 群友每天都会在群里给大家讲解算法题 每周日「负雪明烛」组织直播讲题 我相信来看我博客的大部分人都是通过LeetCode刷题过来的.最近发现LeetCode中文网站 ...
- 【LeetCode每日一题】810. 黑板异或游戏
[LeetCode每日一题]810. 黑板异或游戏 题目: 黑板上写着一个非负整数数组 nums[i] .Alice 和 Bob 轮流从黑板上擦掉一个数字,Alice 先手.如果擦除一个数字后,剩余的 ...
最新文章
- 零基础学C++进腾讯,这份GitHub热榜的「从入门到高薪」请你收下
- UIKit框架使用总结--看看你掌握了多少
- 泛型算法----概述,初识泛型算法,定制操作
- 使用selenium控制滚动条(非整屏body)
- spring cloud+dotnet core搭建微服务架构:服务发现(二)
- 容器环境自建数据库、中间件一键接入阿里云 Prometheus 监控
- Python机器学习库scikit-learn实践
- 项目中AOP的使用-读写分离
- 845. 数组中的最长山脉
- bootstrap基础样式学习(二)——栅格
- JSCore浅析及其在iOS上的使用
- win7 NVMe驱动 SSD固态硬盘 补丁 免重装 DISM++ Windows6.1-KB3087873-v2-x64.msu
- win10计算机切换用户,win10账户切换,详细教您win10怎么切换账户
- 当tomcat启动遇到(你的项目名字) is required and cannot be removed from the server(不能部署到server上)
- Excel自动求和-乘法
- 将Visual Leak Detector集成至Visual Studio 2019
- Win10多台电脑时间自动同步
- vue预览word,excel,pptx,pdf文件
- lucene java 庖丁解牛_Lucene分词器之庖丁解牛
- 深入浅出傅里叶变换(目前看到的讲得最好的一篇文章)
热门文章
- 【Android App】获取照片里的位置信息及使用全球卫星导航系统(GNSS)获取位置实战(附源码和演示 超详细)
- 理解OSRM(4)-MLD算法总览
- 多模块项目依赖注入失败Field xxRepository in xxImpl required a bean of type xxRepository that could not be found
- Windows批量复制文件copy命令bat批处理文件
- python缩写词_在Python中查找和组合首字母缩略词
- arxiv Access Denied 权限问题禁止下载解决方案
- 黑牛外汇交易系统2007年12月17日做单记录
- 汽车标定知识整理(一):标定简介与CCP报文协议简介
- android自动获取天气,android通过google api获取天气信息示例
- d3 - 建立力引导图将知识图谱可视化 (一)