前往
大廳
主題

LeetCode - 999. Available Captures for Rook 解題心得

Not In My Back Yard | 2021-03-04 00:50:00 | 巴幣 10 | 人氣 234

題目連結:


題目意譯:
在一個 8 × 8 的棋盤上,有著恰好一個白色城堡「R」、若干個白色主教「B」、黑色士兵「p」以及空白格子「.」。

當城堡移動時,它會選擇四種基本方向之一(北、東、南或是西),然後往該方向移動直到它選擇停下、抵達棋盤邊緣、抓到一個黑色士兵或是被白色主教擋住。一個城堡被認為可以攻擊到一個士兵如果它在輪到它移動時可以抓到該黑色士兵。白色城堡可以抓到士兵數為該城堡可以攻擊到的士兵數量。

回傳白色城堡可以抓到的士兵之數量。

限制:
board.length == 8
board[i].length == 8
board[i][j] 只會是 「R」 、 「.」 、 「B」 或是 「p」。
只會恰好有一個格子 board[i][j] == 「R」



範例測資:
範例 1:
輸入: board = [[".",".",".",".",".",".",".","."],[".",".",".","p",".",".",".","."],[".",".",".","R",".",".",".","p"],[".",".",".",".",".",".",".","."],[".",".",".",".",".",".",".","."],[".",".",".","p",".",".",".","."],[".",".",".",".",".",".",".","."],[".",".",".",".",".",".",".","."]]
輸出: 3
解釋: 在此例中,城堡可以攻擊到所有士兵。

範例 2:
輸入:board = [[".",".",".",".",".",".",".","."],[".","p","p","p","p","p",".","."],[".","p","p","B","p","p",".","."],[".","p","B","R","B","p",".","."],[".","p","p","B","p","p",".","."],[".","p","p","p","p","p",".","."],[".",".",".",".",".",".",".","."],[".",".",".",".",".",".",".","."]]
輸出: 0
解釋: 主教們擋住了城堡,使得它無法攻擊任何士兵。

範例 3:
輸入:board = [[".",".",".",".",".",".",".","."],[".",".",".","p",".",".",".","."],[".",".",".","p",".",".",".","."],["p","p",".","R",".","p","B","."],[".",".",".",".",".",".",".","."],[".",".",".","B",".",".",".","."],[".",".",".","p",".",".",".","."],[".",".",".",".",".",".",".","."]]
輸出: 3
解釋: 城堡可以攻擊在 b5 、 d6 和 f5 的士兵。


解題思維:
先掃過一次棋盤,找到城堡所在的座標 (X, Y) 後,從 (X, Y) 分別往左、往上、往右、往下移動直到碰到任一種棋子或是棋盤邊緣。

如果碰到的是主教,則代表此方向會被主教擋住,所以即使主教後面有士兵也無法攻擊;如果是黑色士兵,則代表可以攻擊該士兵。

統計四個方向有多少可以攻擊到士兵,該數量即是所求。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作