Leetcode10036. 捕获黑皇后需要的最少移动次数

Every day a Leetcode

题目来源:10036. 捕获黑皇后需要的最少移动次数

解法1:分类讨论

分类讨论:

  • 如果车能直接攻击到皇后,答案是 1。
  • 如果象能直接攻击到皇后,答案是 1。
  • 如果车被象挡住,那么移走象,车就可以攻击到皇后,答案是 2。
  • 如果象被车挡住,那么移走车,象就可以攻击到皇后,答案是 2。
  • 如果车不能直接攻击到皇后,那么车可以水平移动或者垂直移动,其中一种方式必定不会被象挡住,可以攻击到皇后,答案是 2。

对于车,如果和皇后在同一水平线或者同一竖直线,且中间没有象,那么就可以直接攻击到皇后。

对于象,如果和皇后在同一斜线,且中间没有车,那么就可以直接攻击到皇后。

代码:

/*
 * @lc app=leetcode.cn id=10036 lang=cpp
 *
 * [10036] 捕获黑皇后需要的最少移动次数
 */

// @lc code=start
class Solution
{
public:
    int minMovesToCaptureTheQueen(int a, int b, int c, int d, int e, int f)
    {
        // 车和皇后在一条横线上,且它们之间没有象
        if (a == e && !(a == c && d > min(b, f) && d < max(b, f)))
            return 1;
        // 车和皇后在一条竖线上,且它们之间没有象
        if (b == f && !(b == d && c > min(a, e) && c < max(a, e)))
            return 1;
        // 象和皇后在一条斜线上,且它们之间没有车
        if ((c + d == e + f && !(a + b == e + f && a > min(c, e) && a < max(c, e))) ||
            (c - d == e - f && !(a - b == e - f && a > min(c, e) && a < max(c, e))))
            return 1;
        return 2;
    }
};
// @lc code=end

结果:

Leetcode10036. 捕获黑皇后需要的最少移动次数_第1张图片

复杂度分析:

时间复杂度:O(1)。

空间复杂度:O(1)。

你可能感兴趣的:(Every,day,a,LeetCode,leetcode,C++,数据结构与算法)