C ++板上的战舰
假设我们有一个2D板,我们必须计算其中有多少艘战舰。战列舰用符号“X”表示,空槽用“。”表示。我们可以假设这些规则-
您会收到一个仅由战舰或空插槽组成的有效木板。
战舰只能水平或垂直放置。换句话说,它们只能做成1xN(1行,N列)或Nx1(N行,1列)的形状,其中N可以是任何大小。
两艘战列舰之间至少有一个水平或垂直的舱室分隔开-没有相邻的战列舰。
因此,如果董事会是这样的:
然后输出将为2,因为有两艘战舰。
为了解决这个问题,我们将遵循以下步骤-
ans:=0,n:=行数和m:=列数
对于第i行
如果board[i,j]是点,则进行下一次迭代
如果i>0并且board[i–1,j]='X',则进行下一次迭代
如果j>0并且board[i,j-1]='X',则进行下一次迭代
将ans增加1
对于第j列
返回ans
让我们看下面的实现以更好地理解-
示例
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int countBattleships(vector<vector<char>>& board) {
int ans = 0;
int n = board.size();
int m = board[0].size();
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
if(board[i][j] == '.')continue;
if(i > 0 && board[i - 1][j] == 'X')continue;
if(j > 0 && board[i][j - 1] == 'X')continue;
ans++;
}
}
return ans;
}
};
main(){
vector<vector<char>> v = {{'X','.','.','X'},{'.','.','.','X'},{'.','.','.','X'}};
Solution ob;
cout << (ob.countBattleships(v));
}输入值
[["X",".",".","X"],[".",".",".","X"],[".",".",".","X"]]
输出结果
2