LeetCode刷题——车的可用捕获量

题目描述:

             在一个 8 x 8 的棋盘上,有一个白色车(rook)。
       也可能有空方块,白色的象(bishop)和黑色的卒(pawn)。
       它们分别以字符 “R”,“.”,“B” 和 “p” 给出。大写字符表示白棋,小写字符表示黑棋。

             车按国际象棋中的规则移动:它选择四个基本方向中的一个(北,东,西和南),
       然后朝那个方向移动,直到它选择停止、到达棋盘的边缘或移动到同一方格
      来捕获该方格上颜色相反的卒。另外,车不能与其他友方(白色)象进入同一个方格。

      返回车能够在一次移动中捕获到的卒的数量。

示例:

输入:[[".",".",".",".",".",".",".","."],
            [".",".",".","p",".",".",".","."],
            [".",".",".","R",".",".",".","p"],
            [".",".",".",".",".",".",".","."],
            [".",".",".",".",".",".",".","."],
            [".",".",".","p",".",".",".","."],
            [".",".",".",".",".",".",".","."],
            [".",".",".",".",".",".",".","."]]
输出:3
        解释:
                 在本例中,车能够捕获所有的卒。

代码实现:

# 方法一:
def numRookCaptures1(self, board: List[List[str]]) -> int:
"找到 R 所在行和列的所有元素进行切片和遍历,"
    row = None
    col = None
    for x in range(len(board)):
        if "R" in board[x]:
            row = x
            break

    col = board[row].index("R")
    count = 0
    for i in board[row][col + 1 :]:
        if i == ".":
            pass
        elif i == "B":
            break
        elif i == "p":
            count += 1
            break

    for i in board[row][col - 1 :: -1]:
        if i == ".":
            pass
        elif i == "B":
            break
        elif i == "p":
            count += 1
            break
    s = ''.join(i[col] for i in board)
    pos = s.index("R")
    for x in s[pos + 1:]:
        if x == ".":
            pass
        elif x == "B":
            break
        elif x == "p":
            count += 1
            break

    for x in s[pos - 1::-1]:
        if x == ".":
            pass
        elif x == "B":
            break
        elif x == "p":
            count += 1
            break
    print(count)




# 方法二:
def numRookCaptures2(self, board: List[List[str]]) -> int:
     '''
        首先找到车所在的行和列
        然后根据所在的行和列匹配车所能捕获的卒数
        '''
    output = 0
    col = None
    row = None
    for i in range(len(board)):
        if 'R' in board[i]:
            row = i
            break
    col = board[row].index('R')
    s = ''.join(board[row])
    s = s.replace('.', '')
    if 'pR' in s:
        output += 1
    if 'Rp' in s:
        output += 1
    s = ''.join([i[col] for i in board])
    s = s.replace('.', '')
    if 'pR' in s:
        output += 1
    if 'Rp' in s:
    output += 1
    return output

                                                     关注我的公众号免费领取  30G python学习资料!!

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值