https://leetcode.com/problems/battleships-in-a-board/

给定一个N×N的棋盘,有任意数量的1×N或N×1大小的“船”,注意船船之间是不相邻的,要求统计有多少船

Example:

X..X
...X
...X

In the above board there are 2 battleships.

解题思路

Given an 2D board, count how many different battleships are in it.

这是题目头一句话,different这个词把我搞懵了,我的理解是如果在棋盘上如果有同样size,同样方向的船应该是算一种的

如["XX..","....","..XX"]这个例子,输出我觉得应该是1,但是我看了leetcode给的top solutions,按照这类解法,输出普遍是2

rucode了一下,结果如下:

Run Code Result:
Your input
["XX..","....","..XX"]
Expected answer
2
 
Runtime: 39 ms

说明其实只要统计棋盘里面有几条船就可以了

那么解法就很简单了,只用统计有多少个“船头”就可以了

船头定义如下:

1、是个X(废话)

2、上面为空(在棋盘边界)或为.

3、左边为空(在棋盘边界)或为.

同时注意测试用例其实是没有空棋盘(return0)的情况的,加上判空代码是处于严谨性

船头解法

 class Solution(object):#head,top_left
def countBattleships(self, board):
if len(board) == 0: return 0
m, n = len(board), len(board[0])
count = 0
for i in range(m):
for j in range(n):
if board[i][j] == 'X' and (i == 0 or board[i - 1][j] == '.') and (j == 0 or board[i][j - 1] == '.'):
count += 1
return count

按照同样的思路,你也可以统计船尾,左上改为右下即可

if board[i][j] == 'X' and (i == m-1 or board[i + 1][j] == '.') and (j == n-1 or board[i][j + 1] == '.')

419. Battleships in a Board的更多相关文章

  1. 【LeetCode】419. Battleships in a Board

    Given an 2D board, count how many different battleships are in it. The battleships are represented w ...

  2. 419. Battleships in a Board 棋盘上的战舰数量

    [抄题]: Given an 2D board, count how many battleships are in it. The battleships are represented with  ...

  3. [LeetCode] 419. Battleships in a Board 平板上的战船

    Given an 2D board, count how many battleships are in it. The battleships are represented with 'X's, ...

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

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  5. LeetCode "419. Battleships in a Board"

    The follow-up question is fun: "Could you do it in one-pass, using only O(1) extra memory and w ...

  6. 419 Battleships in a Board 甲板上的战舰

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

  7. [LeetCode] Battleships in a Board 平板上的战船

    Given an 2D board, count how many different battleships are in it. The battleships are represented w ...

  8. Battleships in a Board

    Given an 2D board, count how many different battleships are in it. The battleships are represented w ...

  9. Leetcode: Battleships in a Board

    Given an 2D board, count how many different battleships are in it. The battleships are represented w ...

随机推荐

  1. JSONP跨域操作

    JSP <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3. ...

  2. mybatis判断传入list大小

    <if test="tenantIds.size() > 0"> AND A.PROC_TARGET_ID IN <foreach collection=& ...

  3. jQuery Mobile入门

    转:http://www.cnblogs.com/linjiqin/archive/2011/07/17/2108896.html 简介:jQuery Mobile框架可以轻松的帮助我们实现非常好看的 ...

  4. javaScirpt事件详解-原生事件基础(一)

    事件 JavaScript与HTML之间的交互是通过事件实现的.事件,就是文档或浏览器窗口中发生的一些特定的交互瞬间,通过监听特定事件的发生,你能响应相关的操作.图片引用:UI Events 事件流 ...

  5. ASP.NET 身份认证

    ASP.NET 身份认证相关 原理 ASP.NET中身份认证分为两个阶段:认证与授权 1. 认证:识别当前请求的用户是不是一个可识别(登录)用户.AuthenticateRequest 2. 授权:是 ...

  6. Html中<font>标签的使用

    Html中<font>标签的使用 <!doctype html> <html lang="en"> <head> <meta ...

  7. 12月6日PHPCMS取内容发布管理中的来源

    调取内容发布管理中的来源,如果直接写{$val['copyfrom']}调取出来的内容为   内容|0  ,要先根据"|"进行拆分,然后再写. 示例: <!--新闻开始--& ...

  8. mysql 关系表 分组读取的方法

    关系表 是一个一对多的表 我们用的时候往往希望得到 array( a=>array(1,2,3,4....), b=>array(3,4,5,6,7...) ) 这样的数组 所以我们可以使 ...

  9. Gulp基础

    1.什么是gulp? gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器. 2.为什么使用gulp? gulp不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工 ...

  10. 很方便的后台ajax上传文件

    <a href="javascript:void(0);" url="{:U('teacherd?id='.$vo['id'])}" class=&quo ...