力扣刷題記錄 陣列 簡單 999車的可用捕獲量

2021-09-26 02:25:31 字數 2931 閱讀 5000

在乙個 8 x 8 的棋盤上,有乙個白色車(rook)。也可能有空方塊,白色的象(bishop)和黑色的卒(pawn)。它們分別以字元 「r」,「.」,「b」 和 「p」 給出。大寫字元表示白棋,小寫字元表示黑棋。

車按西洋棋中的規則移動:它選擇四個基本方向中的乙個(北,東,西和南),然後朝那個方向移動,直到它選擇停止、到達棋盤的邊緣或移動到同一方格來捕獲該方格上顏色相反的卒。另外,車不能與其他友方(白色)象進入同乙個方格。

返回車能夠在一次移動中捕獲到的卒的數量。

輸入:[[".",".",".",".",".",".",".","."],

[".",".",".",「p」,".",".",".","."],

[".",".",".",「r」,".",".",".",「p」],

[".",".",".",".",".",".",".","."],

[".",".",".",".",".",".",".","."],

[".",".",".",「p」,".",".",".","."],

[".",".",".",".",".",".",".","."],

[".",".",".",".",".",".",".","."]]

輸出:3

解釋:在本例中,車能夠捕獲所有的卒。

輸入:[[".",".",".",".",".",".",".","."],

[".",「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

解釋:象阻止了車捕獲任何卒。

輸入:[[".",".",".",".",".",".",".","."],

[".",".",".",「p」,".",".",".","."],

[".",".",".",「p」,".",".",".","."],

[「p」,「p」,".",「r」,".",「p」,「b」,"."],

[".",".",".",".",".",".",".","."],

[".",".",".",「b」,".",".",".","."],

[".",".",".",「p」,".",".",".","."],

[".",".",".",".",".",".",".","."]]

輸出:3

解釋:車可以捕獲位置 b5,d6 和 f5 的卒。

題目描述的真的挺繞的,簡單說就是車可以向上下左右四個方向走,遇到象就不能再繼續走了,同一方向的車只能捕獲乙個。

簡單方法:首先找到車的位置,然後上下左右四個方向分別搜尋是否有車。對每個方向,若遇到象,則直接退回,一旦捕獲到了乙個車,也退回。

class

solution

(object)

: def numrookcaptures

(self, board)

:"""

:type board: list[list[str]

]:rtype:

int"""

# 找到車r的位置

break_flag = false # 記錄內層迴圈是否break

for i in range(0

,8):

for j in range(0

,8):

if board[i]

[j]==

'r':

m = i

n = j

break_flag = true

break

# 由於只有乙個r,若內層j迴圈break,則外層i也break

if break_flag:

break

count =

0

# 向右搜尋

i = n+

1while i<8:

if board[m]

[i]==

'b':

break

elif board[m]

[i]==

'p':

count +=

1break

i +=

1

# 向左搜尋

i = n-

1while i>0:

if board[m]

[i]==

'b':

break

elif board[m]

[i]==

'p':

count +=

1break

i -=

1

# 向上搜尋

i = m-

1while i>0:

if board[i]

[n]==

'b':

break

elif board[i]

[n]==

'p':

count +=

1break

i -=

1

# 向下搜尋

i = m+

1while i<8:

if board[i]

[n]==

'b':

break

elif board[i]

[n]==

'p':

count +=

1break

i +=

1return count

力扣刷題記錄 陣列 簡單 896單調數列

如果陣列是單調遞增或單調遞減的,那麼它是單調的。如果對於所有 i j,a i a j 那麼陣列 a 是單調遞增的。如果對於所有 i j,a i a j 那麼陣列 a 是單調遞減的。當給定的陣列 a 是單調陣列時返回 true,否則返回 false。class solution object def ...

力扣刷題記錄05

題目分類 二分查詢 時間 2020 09 09 題目一 兩數之和 兩數之和 ii 輸入有序陣列 給定乙個已按照公升序排列 的有序陣列,找到兩個數使得它們相加之和等於目標數。函式應該返回這兩個下標值 index1 和 index2,其中 index1 必須小於 index2。說明 返回的下標值 ind...

力扣刷題記錄2

第一題是每日一題的簡單題。需要記的並不多,一是用迭代器對vector的一些基本操作。可以參考這裡 for vector iterator iter num.begin iter num.end iter 另外是快排的思想。這種思想實用性很廣,即使不需要排序,在找出最大的k個數,對陣列進行分割 以中間...