当前位置: 首页 > news >正文

A.每日一题:1344. 时钟指针的夹角

题目链接:1344. 时钟指针的夹角(中等)

算法原理:

我们简单找找规律~~

差值为6:180°

差值为9:90°

类似的:

差值为11:30°

差值为10:60°

差值为8:120°

度数=(12-差值)✖️30°

左半边相反:差值✖️30°

有的同学就直接写成了⬇️

class Solution { //1344. 时钟指针的夹角 public double angleClock(int hour, int minutes) { //差值为6:180° //差值为9:90° //类似的: //差值为11:30° //差值为10:60° //差值为8:120° //度数=(12-差值)✖️30° //左半边相反:差值✖️30° double num=minutes/5.0; double d=hour-num; if(hour<6) return (12-d)*30%180; return d*30%180; } }

但结果⬇️

关键易错点复盘

易错点 1:时针位置忽略分钟带来的偏移(最核心高频错误)
错误表现:直接用整点小时数计算时针位置(比如 3:30 默认时针在数字 3 处),最终结果偏差固定数值(如这里差了 15°)
本质原因:对时钟运行逻辑的直觉错误 —— 时针不是整点才 “跳一格”,分针转动时,时针会同步匀速偏移
量化规则:时针每小时走 30°(360°÷12),对应每分钟走 0.5°(30°÷60);也可以理解为:每过 1 分钟,时针前进 1/60 个大刻度。
修正方式:时针角度 = (hour % 12) × 30° + minutes × 0.5
易错点 2:用 % 180 求最小夹角(逻辑完全错误)
错误表现:试图用角度对 180 取模,直接得到较小角
本质原因:混淆了 “取模运算” 和 “取圆周短弧” 的逻辑。取模是求余数,不是求 360° 圆周上的补角
反例验证:若两针角度差为 200°,较小角应为 360°-200°=160°;但 200 % 180 = 20,结果完全错误
正确做法:Math.min(差值, 360 - 差值),永远取两个夹角中更小的那个
易错点 3:臆造 “分情况、分左右” 的夹角规律
错误表现:比如你代码里的 if(hour<6) 分支,从少量特例总结出 “差值反向” 的规律,试图分情况计算。
本质原因:用直觉代替数学推导,分情况逻辑极易遗漏边界场景(比如分针在时针左侧 / 右侧、跨 12 点位置等),代码越写越乱还容易错。
正确做法:统一计算两针的绝对角度 → 求绝对差值 → 取最小角。全程无需分支判断,逻辑简洁且无遗漏。
易错点 4:小时数未对 12 取模
错误表现:直接用 hour * 30 计算,遇到 12 点、超过 12 点的数值时逻辑异常。
本质原因:时钟是 12 小时循环,12 点的时针位置等价于 0 点,而非 12×30=360° 的位置。
修正方式:计算时针角度前先做 hour % 12,把小时映射到 0~11 的刻度区间。
易错点 5:整数除法导致精度截断
错误表现:比如写 minutes / 5 而非 minutes / 5.0,Java 中整数相除会直接舍弃小数部分。
反例验证:minutes=7 时,7/5=1(整数除法),但实际分针位置是 1.4 个刻度,误差会被放大
修正方式:涉及刻度、角度计算时,强制使用浮点数运算(除数写为 5.0、60.0 等)
易错点 6:分针 / 时针转速公式记错
错误表现:混淆指针转速,比如误以为分针每分钟走 1°、每大刻度对应 6 分钟等
核心公式必须记牢:
分针:每分钟走 6°(360° ÷ 60 分钟)
时针:每小时走 30°(360° ÷ 12 小时),每分钟走 0.5°

解法一:刻度法

0ms击败100.00%

时间复杂度O(1)

1️⃣分针所在的刻度位置(每5分钟1个大刻度)

2️⃣时针所在的刻度位置(整点刻度 + 分钟带来的偏移)

3️⃣刻度差的绝对值

4️⃣每个刻度对应 30 度

5️⃣取较小夹角

解法二:角度法

0ms击败100.00%

时间复杂度O(1)

1️⃣计算分针角度:每分钟走 6 度 (360/60)

2️⃣计算时针角度:整点走 30 度/小时 + 分钟偏移 0.5 度/分钟

3️⃣求两针角度差的绝对值

4️⃣返回较小的夹角(圆周 360 度,取小的那段弧)

Java代码:

class Solution { //1344. 时钟指针的夹角 //解法一:刻度法 public double angleClock(int hour, int minutes) { // 分针所在的刻度位置(每5分钟1个大刻度) double minuteMark = minutes / 5.0; // 时针所在的刻度位置(整点刻度 + 分钟带来的偏移) double hourMark = (hour % 12) + minutes / 60.0; // 刻度差的绝对值 double diffMark = Math.abs(hourMark - minuteMark); // 每个刻度对应 30 度 double angle = diffMark * 30; // 取较小夹角 return Math.min(angle, 360 - angle); } }
class Solution { //1344. 时钟指针的夹角 //解法二:角度法 public double angleClock(int hour, int minutes) { // 1. 计算分针角度:每分钟走 6 度 (360/60) double minuteAngle = minutes * 6.0; // 2. 计算时针角度:整点走 30 度/小时 + 分钟偏移 0.5 度/分钟 // hour%12 处理 12 点等价于 0 点的情况 double hourAngle = (hour % 12) * 30.0 + minutes * 0.5; // 3. 求两针角度差的绝对值 double diff = Math.abs(hourAngle - minuteAngle); // 4. 返回较小的夹角(圆周 360 度,取小的那段弧) return Math.min(diff, 360 - diff); } }
http://www.cnnetsun.cn/news/3033861.html

相关文章:

  • 【2026】超详细中望CAD机械版2026安装保姆级教程,永久免费使用,机械设计环境配置指南,看完这一篇就够了
  • 冯·诺依曼结构和哈佛结构
  • 激光焊接不只是替掉了钎焊——它正在重新定义液冷板能长什么样
  • TensorFlow 学习
  • Linux命令-pwd(打印当前工作目录)
  • 三分钟带你认识有机溶质转运蛋白(OST)家族
  • AI引发存储危机,苹果Mac、iPad涨价,iPhone 18会跟进吗?
  • 服务周到的牙科诊所如何挑选
  • RocketMQ 从0到1
  • 89.7%恶意IP活不过1个月:金融风控如何用日更离线库应对住宅中继攻击?
  • 市级工程实验室申报条件:
  • 早高峰整层职场集体断网:逐包溯源揪出私接路由器引发的广播风暴祸根
  • 宏观-中观-微观关联模型构建与数据融合方案
  • Grok 4.3大模型应该怎么用?2026 实操步骤、应用场景与注意事项
  • 基因组编辑技术如何实现从“精雕细琢“到“大刀阔斧“的跨越?
  • AI 写代码为什么会错?上下文、测试和反馈循环
  • 微软Intelligent Terminal中登录GitHub Copilot
  • Ubuntu24.04.4安装堡垒机JummpServer
  • 国内最好用协会私域管理系统软件口碑排行榜单:从选型困惑到高效落地的实践路径
  • 电脑自主操作 AI 助手 OpenClaw,全可视化落地实操文档(包含安装包)
  • 【AI产品经理】 第四章 安全合规与边界设计
  • 吴恩达《深度学习》之看懂集束搜索
  • VS Code 文件调用路径问题
  • 九九云环境智能精准喷氨系统,把脱硝成本压缩到最优区间
  • bond网络问题(印象笔记归档)
  • 【深度评测】AU-60 AI语音模组:智能机器人拾音对讲的终极解决方案
  • 5分钟快速上手:如何使用Ray Adapter将Ray应用迁移到华为昇腾硬件
  • 联想拯救者笔记本性能优化终极指南:Lenovo Legion Toolkit完全掌控
  • OpenClaw 小龙虾 Windows 部署完整教程,10 分钟搭建专属桌面 AI 数字员工(含安装包)
  • Spring-adapter注解详解:@FunctionService和@FunctionHandler使用指南