题目描述:
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) orNx1(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?
在矩阵中,用相连的“X”表示一艘战舰,每艘战舰必定不和其他战舰相交,求甲板上一共有多少艘战舰,要求只遍历一遍,使用O(1)的额外空间。其实只需要判断一艘战舰的首部就能确定一艘战舰,当一个点为“X”,而且它的上方或者前方都不是“X”,或者它位于第一列或者第一行,都说明这个点是战舰首部,因此战舰数加一。
class Solution {
public:
int countBattleships(vector<vector<char>>& board) {
if(board.size()==0||board[0].size()==0) return 0;
int m=board.size();
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]=='X'&&(i==0||board[i-1][j]=='.')&&(j==0||board[i][j-1]=='.'))
count++;
}
}
return count;
}
};
本文介绍了一种在二维矩阵中计数战舰数量的高效算法。该算法仅需遍历一次矩阵,并使用O(1)的额外空间。通过判断每个‘X’是否为首部来确定战舰数量。
270

被折叠的 条评论
为什么被折叠?



