LeetCode--419. Battleships in a Board

一,题目截图

这里写图片描述

二,编程语言知识回顾–C++ vector

   vector(向量): C++中的一种数据结构,确切的说是一个类。它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的。
  用法: 1. include
      2. using namespace std;
  声明: 1. vector a;(等于声明了一个int数组a[],大小没有指定,可以动态的向里面添加删除。)
      2. vector< vector< int>> array(3) (array可以保存三个向量,向量长度可变。)可以resize改变大小,具体用法见引用第二篇。
  函数:1.push_back 在数组的最后添加一个数据
      2.pop_back 去掉数组的最后一个数据
      3.at 得到编号位置的数据
      4.begin 得到数组头的指针
      5.end 得到数组的最后一个单元+1的指针
      6.front 得到数组头的引用
      7.back 得到数组的最后一个单元的引用
      8.max_size 得到vector最大可以是多大
      9.capacity 当前vector分配的大小
      10.size 当前使用数据的大小
      11.resize 改变当前使用数据的大小,如果它比当前使用的大,者填充默认值
      12.reserve 改变当前vecotr所分配空间的大小
      13.erase 删除指针指向的数据项
      14.clear 清空当前的vector
      15.rbegin 将vector反转后的开始指针返回(其实就是原来的end-1)
      16.rend 将vector反转构的结束指针返回(其实就是原来的begin-1)
      17.empty 判断vector是否为空
      18.swap 与另一个vector交换数据

引用自:http://blog.csdn.net/hancunai0017/article/details/7032383
    http://blog.csdn.net/zsuguangh/article/details/6135529

三,解法

题中不让用的解法:

找到‘X’后,将它周围的‘X’全部变为‘.’即可。

题目要求不可改变board,额外空间为O(1):
class Solution {
public:
    int countBattleships(vector<vector<char>>& board) {
        int m = board.size();
        if (m == 0) return 0;
        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] == '.') continue;
                if (i > 0 && board[i - 1][j] == 'X') continue;
                if (j > 0 && board[i][j - 1] == 'X') continue;
                count++;
            }
        }
        return count; 
    }
};

找到的‘X’上面以及左边都没有‘X’,即为符合条件的‘X’
如果找到X上面或者左面有X,说明这个X与上面或左面的X是同一个战舰上的一部分!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值