力扣每日一题 - 3001. 捕获黑皇后需要的最少移动次数

题目

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;
      };
相关推荐
mCell8 小时前
Lua 编程入门:从基础语法到元表
javascript·算法·lua
wuyk55510 小时前
98.C语言易混难点:字符数组与字符串指针的底层差异
c语言·开发语言·c++·stm32·嵌入式硬件·算法
峥无10 小时前
从0到1手撕红黑树:封装实现 my_map 与 my_set(SGI-STL 源码级深度解析)
开发语言·c++·笔记·算法·stl
不会代码的小猴11 小时前
3. 控件学习1
开发语言·c++·笔记·qt·算法
203号居民13 小时前
LeetCode hot 100 —41. 缺失的第一个正数
数据结构·算法·leetcode
专注仿真15 小时前
问答大模型技术方案算法实现-熵权法融合算法 + 交叉编码器重排算法
人工智能·python·算法·语言模型·问答大模型关键算法·熵权融合算法·交叉编码器重排算法
evans在进步15 小时前
LeetCode 322:零钱兑换——Java 动态规划详解
java·leetcode·动态规划
地平线开发者16 小时前
量化为什么会有损失:从量化误差到精度下降
算法
手写码匠16 小时前
华为云Flexus+DeepSeek征文|Dify 多 Agent 会话管理与上下文工程实战:让智能体“记住该记住的,忘掉该忘掉的“
人工智能·深度学习·算法·aigc