999. 车的可用捕获量

题目描述:

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

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

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

示例 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

解题思路:

根据题目意思,白色的车分别沿着上下左右四个方向,当遇到白色的卒或者到达边界位置时停下来,否则遇到黑色的卒数量加一,然后停止往下走。


代码:

class Solution(object):
    def numRookCaptures(self, board):
        m = len(board)
        n = len(board[0])
        R_line ,R_column = 0, 0
        number = 0

        for i in range(m):
            for j in range(n):
                if board[i][j] == "R":
                    R_line = i
                    R_column = j
                    break

        for i in range(R_line-1,0,-1):       # 向上
            if board[i][R_column] != "B":
                if board[i][R_column] == "p":
                    number += 1
                    break
            else:
                break

        for i in range(R_line+1, m):       # 向下
            if board[i][R_column] != "B" :
                if board[i][R_column] == "p":
                    number += 1
                    break
            else:
                break

        for j in range(R_column-1, 0, -1):       # 向左
            if board[R_line][j] != "B" :
                if board[R_line][j] == "p":
                    number += 1
                    break
            else:
                break

        for j in range(R_column+1, n, 1):       # 向右
            if board[R_line][j] != "B":
                if board[R_line][j] == "p":
                    number += 1
                    break
            else:
                break

        return number

s = Solution()
board = [[".",".",".",".",".",".",".","."],
        [".",".",".","p",".",".",".","."],
        [".",".",".","R",".",".",".","p"],
        [".",".",".",".",".",".",".","."],
        [".",".",".",".",".",".",".","."],
        [".",".",".","p",".",".",".","."],
        [".",".",".",".",".",".",".","."],
        [".",".",".",".",".",".",".","."]]
print(s.numRookCaptures(board))

题目来源:
999. 车的可用捕获量

扫描二维码关注公众号,回复: 10258627 查看本文章
发布了378 篇原创文章 · 获赞 43 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/weixin_43283397/article/details/105114685