go語言LeetCode題解999可以被一步捕獲的棋子數(shù)
題目描述
999. 可以被一步捕獲的棋子數(shù) - 力扣(LeetCode)
在一個 8 x 8 的棋盤上,有一個白色的車(Rook),用字符 'R' 表示。棋盤上還可能存在空方塊,白色的象(Bishop)以及黑色的卒(pawn),分別用字符 '.','B' 和 'p' 表示。不難看出,大寫字符表示的是白棋,小寫字符表示的是黑棋。
車按國際象棋中的規(guī)則移動。東,西,南,北四個基本方向任選其一,然后一直向選定的方向移動,直到滿足下列四個條件之一:
- 棋手選擇主動停下來。
- 棋子因到達(dá)棋盤的邊緣而停下。
- 棋子移動到某一方格來捕獲位于該方格上敵方(黑色)的卒,停在該方格內(nèi)。
- 車不能進(jìn)入/越過已經(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'
思路分析
這道題首先要理解題意
- 如果沒有阻擋,車可以無限移動,除非自己停止
- 遇到象,停止。停止的意思是不能向前,但可以向后
- 遇到邊,停止。停止的意思是不能向前,但可以向后
- 遇到卒,吃掉,然后在這個方向上必須停止。
解題方法,先整理
- 去掉沒用的信息
- 把二維問題轉(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是個一維數(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)文章
golang如何使用gos7讀取S7200Smart數(shù)據(jù)
文章介紹了如何使用Golang語言的Gos7工具庫讀取西門子S7200Smart系列PLC的數(shù)據(jù),通過指定數(shù)據(jù)塊號、起始字節(jié)偏移量和數(shù)據(jù)長度,可以精確讀取所需的數(shù)據(jù),感興趣的朋友跟隨小編一起看看吧2024-12-12
Golang中的自定義類型之間的轉(zhuǎn)換的實現(xiàn)(type conversion)
這篇文章主要介紹了Golang中的自定義類型之間的轉(zhuǎn)換的實現(xiàn)(type conversion),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02
詳解Go語言如何使用標(biāo)準(zhǔn)庫sort對切片進(jìn)行排序
Sort?標(biāo)準(zhǔn)庫提供了對基本數(shù)據(jù)類型的切片和自定義類型的切片進(jìn)行排序的函數(shù)。今天主要分享的內(nèi)容是使用?Go?標(biāo)準(zhǔn)庫?sort?對切片進(jìn)行排序,感興趣的可以了解一下2022-12-12
golang 實現(xiàn)兩個結(jié)構(gòu)體復(fù)制字段
這篇文章主要介紹了golang 實現(xiàn)兩個結(jié)構(gòu)體復(fù)制字段,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04
CentOS7使用yum安裝Golang的超詳細(xì)步驟
CentOS默認(rèn)并沒有安裝golang運行環(huán)境,下面這篇文章主要給大家介紹了關(guān)于CentOS7使用yum安裝Golang的超詳細(xì)步驟,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02

