go語言LeetCode題解999可以被一步捕獲的棋子數(shù)
題目描述
999. 可以被一步捕獲的棋子數(shù) - 力扣(LeetCode)
在一個(gè) 8 x 8
的棋盤上,有一個(gè)白色的車(Rook
),用字符 'R'
表示。棋盤上還可能存在空方塊,白色的象(Bishop
)以及黑色的卒(pawn
),分別用字符 '.'
,'B'
和 'p'
表示。不難看出,大寫字符表示的是白棋,小寫字符表示的是黑棋。
車按國際象棋中的規(guī)則移動(dòng)。東,西,南,北四個(gè)基本方向任選其一,然后一直向選定的方向移動(dòng),直到滿足下列四個(gè)條件之一:
- 棋手選擇主動(dòng)停下來。
- 棋子因到達(dá)棋盤的邊緣而停下。
- 棋子移動(dòng)到某一方格來捕獲位于該方格上敵方(黑色)的卒,停在該方格內(nèi)。
- 車不能進(jìn)入/越過已經(jīng)放有其他友方棋子(白色的象)的方格,停在友方棋子前。
你現(xiàn)在可以控制車移動(dòng)一次,請你統(tǒng)計(jì)有多少敵方的卒處于你的捕獲范圍內(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'
只有一個(gè)格子上存在 board[i][j] == 'R'
思路分析
這道題首先要理解題意
- 如果沒有阻擋,車可以無限移動(dòng),除非自己停止
- 遇到象,停止。停止的意思是不能向前,但可以向后
- 遇到邊,停止。停止的意思是不能向前,但可以向后
- 遇到卒,吃掉,然后在這個(gè)方向上必須停止。
解題方法,先整理
- 去掉沒用的信息
- 把二維問題轉(zhuǎn)為一維問題。
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是個(gè)一維數(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ù)的詳細(xì)內(nèi)容,更多關(guān)于go 一步捕獲的棋子數(shù)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Windows10系統(tǒng)下安裝Go環(huán)境詳細(xì)步驟
Go語言是谷歌推出的一款全新的編程語言,可以在不損失應(yīng)用程序性能的情況下極大的降低代碼的復(fù)雜性,這篇文章主要給大家介紹了關(guān)于Windows10系統(tǒng)下安裝Go環(huán)境的詳細(xì)步驟,需要的朋友可以參考下2023-11-11詳解如何在Golang中監(jiān)聽多個(gè)channel
這篇文章主要為大家詳細(xì)介紹了如何在Golang中實(shí)現(xiàn)監(jiān)聽多個(gè)channel,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-03-03Golang中處理import自定義包出錯(cuò)問題的解決辦法
最近開始使用Go/GoLand在import自定義包時(shí)出現(xiàn)各種狀況,下面這篇文章主要給大家介紹了關(guān)于Golang中處理import自定義包出錯(cuò)問題的解決辦法,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-11-11讓goland支持proto文件類型的實(shí)現(xiàn)
這篇文章主要介紹了讓goland支持proto文件類型的實(shí)現(xiàn)操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12golang?基于?mysql?簡單實(shí)現(xiàn)分布式讀寫鎖
這篇文章主要介紹了golang?基于mysql簡單實(shí)現(xiàn)分布式讀寫鎖,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09