假设我们有一个2D板,我们必须计算其中有多少艘战舰。战列舰用符号“ X”表示,空槽用“。”表示。我们可以假设这些规则-
您会收到一个仅由战舰或空插槽组成的有效木板。
战舰只能水平或垂直放置。换句话说,它们只能做成1xN(1行,N列)或Nx1(N行,1列)的形状,其中N可以是任何大小。
两艘战列舰之间至少有一个水平或垂直的舱室分隔开-没有相邻的战列舰。
因此,如果董事会是这样的:
X | 。 | 。 | X |
。 | 。 | 。 | X |
。 | 。 | 。 | X |
然后输出将为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