1. 程式人生 > 其它 >力扣419(java)-甲板上的戰艦(中等)

力扣419(java)-甲板上的戰艦(中等)

題目:

給你一個大小為 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