class Solution {
public:
int minMovesToCaptureTheQueen(int a, int b, int c, int d, int e, int f) {
}
};
3001. 捕获黑皇后需要的最少移动次数
现有一个下标从 0 开始的 8 x 8
棋盘,上面有 3
枚棋子。
给你 6
个整数 a
、b
、c
、d
、e
和 f
,其中:
(a, b)
表示白色车的位置。(c, d)
表示白色象的位置。(e, f)
表示黑皇后的位置。假定你只能移动白色棋子,返回捕获黑皇后所需的最少移动次数。
请注意:
示例 1:
输入:a = 1, b = 1, c = 8, d = 8, e = 2, f = 3 输出:2 解释:将白色车先移动到 (1, 3) ,然后移动到 (2, 3) 来捕获黑皇后,共需移动 2 次。 由于起始时没有任何棋子正在攻击黑皇后,要想捕获黑皇后,移动次数不可能少于 2 次。
示例 2:
输入:a = 5, b = 3, c = 3, d = 4, e = 5, f = 2 输出:1 解释:可以通过以下任一方式移动 1 次捕获黑皇后: - 将白色车移动到 (5, 2) 。 - 将白色象移动到 (5, 2) 。
提示:
1 <= a, b, c, d, e, f <= 8
原站题解
golang 解法, 执行用时: 0 ms, 内存消耗: 2.5 MB, 提交时间: 2024-01-14 12:43:51
func minMovesToCaptureTheQueen(a, b, c, d, e, f int) int { if a == e && (c != e || ok(b, d, f)) || b == f && (d != f || ok(a, c, e)) || c+d == e+f && (a+b != e+f || ok(c, a, e)) || c-d == e-f && (a-b != e-f || ok(c, a, e)) { return 1 } return 2 } func ok(l, m, r int) bool { return m < min(l, r) || m > max(l, r) }
cpp 解法, 执行用时: 0 ms, 内存消耗: 6.2 MB, 提交时间: 2024-01-14 12:43:35
class Solution { bool ok(int l, int m, int r) { return m < min(l, r) || m > max(l, r); } public: int minMovesToCaptureTheQueen(int a, int b, int c, int d, int e, int f) { if (a == e && (c != e || ok(b, d, f)) || b == f && (d != f || ok(a, c, e)) || c + d == e + f && (a + b != e + f || ok(c, a, e)) || c - d == e - f && (a - b != e - f || ok(c, a, e))) { return 1; } return 2; } };
java 解法, 执行用时: 0 ms, 内存消耗: 39.7 MB, 提交时间: 2024-01-14 12:43:16
class Solution { public int minMovesToCaptureTheQueen(int a, int b, int c, int d, int e, int f) { if (a == e && (c != e || ok(b, d, f)) || b == f && (d != f || ok(a, c, e)) || c + d == e + f && (a + b != e + f || ok(c, a, e)) || c - d == e - f && (a - b != e - f || ok(c, a, e))) { return 1; } return 2; } private boolean ok(int l, int m, int r) { return m < Math.min(l, r) || m > Math.max(l, r); } }
python3 解法, 执行用时: 48 ms, 内存消耗: 17.1 MB, 提交时间: 2024-01-14 12:43:00
class Solution: def minMovesToCaptureTheQueen(self, a: int, b: int, c: int, d: int, e: int, f: int) -> int: def ok(l: int, m: int, r: int) -> bool: return not min(l, r) < m < max(l, r) if a == e and (c != e or ok(b, d, f)) or \ b == f and (d != f or ok(a, c, e)) or \ c + d == e + f and (a + b != e + f or ok(c, a, e)) or \ c - d == e - f and (a - b != e - f or ok(c, a, e)): return 1 return 2