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
廣告