力扣419(java)-甲板上的戰艦(中等)
阿新 • • 發佈:2022-04-17
題目:
給你一個大小為 m x n 的矩陣 board 表示甲板,其中,每個單元格可以是一艘戰艦 'X' 或者是一個空位 '.' ,返回在甲板 board 上放置的 戰艦 的數量。
戰艦 只能水平或者垂直放置在 board 上。換句話說,戰艦隻能按 1 x k(1 行,k 列)或 k x 1(k 行,1 列)的形狀建造,其中 k 可以是任意大小。兩艘戰艦之間至少有一個水平或垂直的空位分隔 (即沒有相鄰的戰艦)。
示例 1:
輸入:board = [["X",".",".","X"],[".",".",".","X"],[".",".",".","X"]]
輸出:2
示例 2:
輸入:board = [["."]]
輸出:0
提示:
m == board.length
n == board[i].length
1 <= m, n <= 200
board[i][j] 是 '.' 或 'X'
進階:你可以實現一次掃描演算法,並只使用 O(1) 額外空間,並且不修改 board 的值來解決這個問題嗎?
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/battleships-in-a-board
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
解題思路:
假定位置 [i,j]為戰艦上的左上頂點,以該位置為戰艦的起始位置,需要滿足以下條件才能判定為一個戰艦:
- 該位置元素為 'X':board[i][j] == 'X';
- 該位置的左邊元素為 ‘.’: board[i][j-1] == '.';
- 該位置的上邊元素為'.':board[i-1][j] == '.'
即統計出所有滿足條件的左上頂點個數就是戰艦的個數。
程式碼:
小知識:
不管幾維陣列,記憶體都是按一維儲存的。
給定一個二維陣列int[] [] matrix,它的行數為:matrix.length,列數為:matrix[0].length