Leetcode 3001. Minimum Moves to Capture The Queen

本文解析了LeetCode题目3001MinimumMovestoCaptureTheQueen,介绍了解题思路,即只需考虑一步或两步吃掉皇后的情况。代码实现中,通过检查皇后与车、象的位置关系来确定是否能一步捕捉,展示了Python代码和性能优化结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 解题思路

这一题披着国际象棋的皮,不过其实算是一道比较常规的题目了,毕竟要求后不走动挨吃实在是有点离谱了……

Anyway,显然无论针对何种情况,至多用车走两步就能确保吃掉后,因此我们只需要考察哪些情况下只需要1步就能吃掉后的情况就行。

而要一步吃掉后,那么就必须满足如下两个要求:

  1. 后在车或者相的直接行进路线上面;
  2. 另一个子不会挡住该子的行进。

我们将其翻译为代码语言即可。

2. 代码实现

给出python代码实现如下:

class Solution:
    def minMovesToCaptureTheQueen(self, a: int, b: int, c: int, d: int, e: int, f: int) -> int:
        # rook = [a, b]
        # bishop = [c, d]
        # queen = [e, f]
        if a == e:
            if not (c == a and (b <= d <= f or b >= d >= f)):
                return 1
        elif b == f:
            if not (d == b and (a <= c <= e or a >= c >= e)):
                return 1
        elif c-d == e-f:
            if not (c-d == a-b and (c <= a <= e or c >= a >= e)):
                return 1
        elif c+d == e+f:
            if not (c+d == a+b and (c <= a <= e or c >= a >= e)):
                return 1
        return 2

提交代码评测得到:耗时36ms,占用内存17.4MB。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值