Every day a Leetcode
解法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
结果:
复杂度分析:
时间复杂度:O(1)。
空间复杂度:O(1)。