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

    题目描述:

    Given an 2D board, count how many battleships are in it. The battleships are represented with 'X's, empty slots are represented with '.'s. You may assume the following rules:

    • You receive a valid board, made of only battleships or empty slots.
    • Battleships can only be placed horizontally or vertically. In other words, they can only be made of the shape 1xN (1 row, N columns) or Nx1 (N rows, 1 column), where N can be of any size.
    • At least one horizontal or vertical cell separates between two battleships - there are no adjacent battleships.

    Example:

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

    In the above board there are 2 battleships.

    Invalid Example:

    ...X
    XXXX
    ...X
    

    This is an invalid board that you will not receive - as battleships will always have a cell separating between them.

    Follow up:
    Could you do it in one-pass, using only O(1) extra memory and without modifying the value of the board?

    解题思路:

    善于利用题目信息”This is an invalid board that you will not receive - as battleships will always have a cell separating between them.“,battleship不相邻,一个点如果是battleship中一点,当battleship的长度大于一时其横向或者纵向临近的点肯定是'X',当battleship的长度为一时其临近的点都是‘.’。因此,对于每个battleship,我们只统计其纵向或者横向的第一个点。

    代码:

     1 class Solution {
     2 public:
     3     int countBattleships(vector<vector<char>>& board) {
     4         int num = 0;
     5         int col = board[0].size();
     6         int row = board.size();
     7         for (int i = 0; i < row; ++i) {
     8             for (int j = 0; j < col; ++j) {
     9                 if (board[i][j] == 'X') {
    10                     if (i > 0 && board[i-1][j] == 'X')
    11                         continue;
    12                     if (j > 0 && board[i][j-1] == 'X')
    13                         continue;
    14                     num++;
    15                 }
    16             }
    17         }
    18         return num;
    19     }
    20 };
  • 相关阅读:
    linux下解除端口占用
    设计模式(二)观察者模式
    设计模式(一) 策略模式
    loj #6235. 区间素数个数
    loj #2013. 「SCOI2016」幸运数字
    loj #6014. 「网络流 24 题」最长 k 可重区间集
    loj #6013. 「网络流 24 题」负载平衡
    loj #2255. 「SNOI2017」炸弹
    loj #2051. 「HNOI2016」序列
    loj #6122. 「网络流 24 题」航空路线问题
  • 原文地址:https://www.cnblogs.com/gsz-/p/9439691.html
Copyright © 2011-2022 走看看