zoukankan      html  css  js  c++  java
  • 419. Battleships in a Board

    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)的情况的,加上判空代码是处于严谨性

     

    船头解法

     1 class Solution(object):#head,top_left
     2     def countBattleships(self, board):
     3         if len(board) == 0: return 0
     4         m, n = len(board), len(board[0])
     5         count = 0
     6         for i in range(m):
     7             for j in range(n):
     8                 if board[i][j] == 'X' and (i == 0 or board[i - 1][j] == '.') and (j == 0 or board[i][j - 1] == '.'):
     9                     count += 1
    10         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] == '.')
  • 相关阅读:
    javascript 中检测数据类型的方法
    javascript 中的类数组和数组
    html5 构造网页的新方式
    关于 jQuery 中的 $.data() 方法和 jQuery 对象上的data 方法
    基于北洋PT站表结构分析以及ORM重写
    面试题准备
    sqlalchemy 外键
    sqlalchemy
    ansible roles
    ansible
  • 原文地址:https://www.cnblogs.com/TheLaughingMan/p/6216919.html
Copyright © 2011-2022 走看看