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
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP