近来以来,我在力扣上对峙完成天天一题,今天系统推的标题为《甲板上的战舰》,在此记载一下。
标题描述如下:
给你一个大小为 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
拿到标题后,我的大抵思绪是如许的:
1.界说一个count计数器,初始值为0
2.战舰的摆放有哪些环境?经过思索后,我以为有以下三种环境:
该战舰为一个单独的“点”,即只占数组中一个格子
该战舰为1×k类型的战舰,即纵向战舰,k>=2
该战舰为k×1类型的战舰,即横向战舰,k>=2
3.什么时候count增加?
对于一艘战舰,我们遍历数组时,只在战舰的头部(即首次在该艘战舰上扫描到'X'时)将count+1,之后再次在该艘战舰上扫描到'X'则不再增加
4.返回count值,步伐结束
ok,思绪有了,这道题已经做的十有八九了,接下来我们再来思索一个问题,即如何判断我们扫描到的'X'是否是某艘战舰的头部呢?
当我们扫描到board[j]位置时,如果该位置为'X',并且该位置左侧以及该位置上侧不为'X',则该位置为某艘战舰的头部,此时count++
要注意的是,当i=0时,该位置是没有上侧的;当j=0时,该位置没有左侧。
代码如下:
点击查看代码[code]public int countBattleships(char[][] board) { int count = 0; for(int i=0; i |