题目
bash
现有一个下标从 1 开始的 8 x 8 棋盘,上面有 3 枚棋子。
给你 6 个整数 a 、b 、c 、d 、e 和 f ,其中:
(a, b) 表示白色车的位置。
(c, d) 表示白色象的位置。
(e, f) 表示黑皇后的位置。
假定你只能移动白色棋子,返回捕获黑皇后所需的最少移动次数。
请注意:
车可以向垂直或水平方向移动任意数量的格子,但不能跳过其他棋子。
象可以沿对角线方向移动任意数量的格子,但不能跳过其他棋子。
如果车或象能移向皇后所在的格子,则认为它们可以捕获皇后。
皇后不能移动。
思路
- 车和皇后在一条横线上 中间不能有象 或者 象不在车和皇后的中间
- 车和皇后在一条竖线上 中间不能有象 或者 象不在车和皇后的中间
- 象和皇后在一条斜线上 中间不能有车 或者 车不在象和皇后的中间
代码
javascript
var minMovesToCaptureTheQueen = function (a, b, c, d, e, f) {
// 车和皇后在一条横线上 中间不能有象 或者 象不在车和皇后的中间
let judgeHeng = e !== c || d < Math.min(f, b) || d > Math.max(f, b);
if (e === a && judgeHeng) {
return 1;
}
//
// 车和皇后在一条竖线上 中间不能有象 或者 象不在车和皇后的中间
let judgeShu = f !== d || c < Math.min(e, a) || c > Math.max(a, e);
if (f === b && judgeShu) {
return 1;
}
// 象和皇后在一条斜线上 中间不能有车 或者 车不在象和皇后的中间
// judgeSanZhe 前面是个数学公式, 三点共线
// 有个漏洞, 没有做被除数的非0判断 ,不过力扣给通过了,就不想管了
let judgeSanZhe =
(a - e) / (b - f) !== (c - e) / (d - f) ||
a < Math.min(e, c) ||
a > Math.max(e, c);
if (Math.abs(e - c) === Math.abs(f - d) && judgeSanZhe) {
return 1;
}
return 2;
};