go語言LeetCode題解999可以被一步捕獲的棋子數(shù)
題目描述
999. 可以被一步捕獲的棋子數(shù) - 力扣(LeetCode)
在一個 8 x 8
的棋盤上,有一個白色的車(Rook
),用字符 'R'
表示。棋盤上還可能存在空方塊,白色的象(Bishop
)以及黑色的卒(pawn
),分別用字符 '.'
,'B'
和 'p'
表示。不難看出,大寫字符表示的是白棋,小寫字符表示的是黑棋。
車按國際象棋中的規(guī)則移動。東,西,南,北四個基本方向任選其一,然后一直向選定的方向移動,直到滿足下列四個條件之一:
- 棋手選擇主動停下來。
- 棋子因到達棋盤的邊緣而停下。
- 棋子移動到某一方格來捕獲位于該方格上敵方(黑色)的卒,停在該方格內(nèi)。
- 車不能進入/越過已經(jīng)放有其他友方棋子(白色的象)的方格,停在友方棋子前。
你現(xiàn)在可以控制車移動一次,請你統(tǒng)計有多少敵方的卒處于你的捕獲范圍內(nèi)(即,可以被一步捕獲的棋子數(shù))。
示例 1:
輸入:[[".",".",".",".",".",".",".","."],[".",".",".","p",".",".",".","."],[".",".",".","R",".",".",".","p"],[".",".",".",".",".",".",".","."],[".",".",".",".",".",".",".","."],[".",".",".","p",".",".",".","."],[".",".",".",".",".",".",".","."],[".",".",".",".",".",".",".","."]]
輸出:3
解釋:
在本例中,車能夠捕獲所有的卒。
示例 2:
輸入:[[".",".",".",".",".",".",".","."],[".","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:
輸入:[[".",".",".",".",".",".",".","."],[".",".",".","p",".",".",".","."],[".",".",".","p",".",".",".","."],["p","p",".","R",".","p","B","."],[".",".",".",".",".",".",".","."],[".",".",".","B",".",".",".","."],[".",".",".","p",".",".",".","."],[".",".",".",".",".",".",".","."]]
輸出:3
解釋:
車可以捕獲位置 b5,d6 和 f5 的卒。
提示:
board.length == board[i].length == 8
board[i][j] 可以是 'R','.','B' 或 'p'
只有一個格子上存在 board[i][j] == 'R'
思路分析
這道題首先要理解題意
- 如果沒有阻擋,車可以無限移動,除非自己停止
- 遇到象,停止。停止的意思是不能向前,但可以向后
- 遇到邊,停止。停止的意思是不能向前,但可以向后
- 遇到卒,吃掉,然后在這個方向上必須停止。
解題方法,先整理
- 去掉沒用的信息
- 把二維問題轉為一維問題。
AC 代碼
/** * @param {character[][]} board * @return {number} */ var numRookCaptures = function (board) { let count = 0 let info = [] for (let i = 0; i < 8; i++) { let item = [] for (let j = 0; j < 8; j++) { if ('.' !== board[i][j]) { item.push(board[i][j]) } } item.length > 0 && info.push(item) } for (let j = 0; j < 8; j++) { let item = [] for (let i = 0; i < 8; i++) { if ('.' !== board[i][j]) { item.push(board[i][j]) } } item.length > 0 && info.push(item) } //整理好后的info是個一維數(shù)組 for (let item of info) { let index = item.indexOf('R') if (index < 0) continue let i = index while (i--) { if (item[i] === 'B') break; if (item[i] === 'p') { count++ break } } i = index + 1 while (i < item.length) { if (item[i] === 'B') break; if (item[i] === 'p') { count++ break } i++ } } return count };
以上就是go語言LeetCode題解999可以被一步捕獲的棋子數(shù)的詳細內(nèi)容,更多關于go 一步捕獲的棋子數(shù)的資料請關注腳本之家其它相關文章!
相關文章
Windows10系統(tǒng)下安裝Go環(huán)境詳細步驟
Go語言是谷歌推出的一款全新的編程語言,可以在不損失應用程序性能的情況下極大的降低代碼的復雜性,這篇文章主要給大家介紹了關于Windows10系統(tǒng)下安裝Go環(huán)境的詳細步驟,需要的朋友可以參考下2023-11-11golang?基于?mysql?簡單實現(xiàn)分布式讀寫鎖
這篇文章主要介紹了golang?基于mysql簡單實現(xiàn)分布式讀寫鎖,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-09-09