C++中的战舰游戏
假设我们有一个二维棋盘,我们需要计算其中有多少艘战舰。战舰用符号'X'表示,空位用'.'表示。我们可以假设以下规则:
你得到一个有效的棋盘,只由战舰或空位组成。
战舰只能水平或垂直放置。换句话说,它们只能是1xN(1行,N列)或Nx1(N行,1列)的形状,其中N可以是任意大小。
至少一个水平或垂直单元格将两艘战舰隔开——没有相邻的战舰。
因此,如果棋盘如下所示:
X | . | . | X |
. | . | . | X |
. | . | . | X |
那么输出将是2,因为有两艘战舰。
为了解决这个问题,我们将遵循以下步骤:
ans := 0,n := 行数,m := 列数
对于第i行
对于第j列
如果board[i, j]是点,则进入下一轮迭代
如果 i > 0 且 board[i – 1, j] = ‘X’,则进入下一轮迭代
如果 j > 0 且 board[i, j - 1] = ‘X’,则进入下一轮迭代
ans 加 1
返回 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
广告