M1344.时钟指针的夹角
math, https://leetcode.cn/problems/angle-between-hands-of-a-clock/
给你两个数 hour 和 minutes 。请你返回在时钟上,由给定时间的时针和分针组成的较小角的角度(60 单位制)。
示例 1:

输入:hour = 12, minutes = 30
输出:165示例 2:

输入:hour = 3, minutes = 30
输出;75示例 3:

输入:hour = 3, minutes = 15
输出:7.5示例 4:
输入:hour = 4, minutes = 50
输出:155示例 5:
输入:hour = 12, minutes = 0
输出:0提示:
1 <= hour <= 120 <= minutes <= 59- 与标准答案误差在
10^-5以内的结果都被视为正确结果。
这是一个关于时钟指针夹角计算的问题。可以通过计算时针和分针分别相对于 12 点钟方向的角度,然后求出它们之间的差值来解决。
解题思路
计算分针的角度:
- 钟表一圈为
,共 60 分钟。因此,分针每分钟移动 。 - 给定
minutes,分针的角度为:
- 钟表一圈为
计算时针的角度:
- 钟表一圈共 12 个小时,时针每小时移动
。 - 同时,分针的移动也会带动时针移动。在 1 小时(60 分钟)内,时针移动
,因此时针每分钟移动 。 - 我们需要将 12 点视为 0 点(即
hour % 12)。 - 给定
hour和minutes,时针的角度为:
- 钟表一圈共 12 个小时,时针每小时移动
计算夹角:
- 两个指针之间的绝对差值为
。 - 因为题目要求返回较小的夹角,如果
,则实际的较小夹角为 。
- 两个指针之间的绝对差值为
Python 3 实现代码
python
class Solution:
def angleClock(self, hour: int, minutes: int) -> float:
# 分针每分钟走 6 度
minutes_angle = minutes * 6
# 时针每小时走 30 度,每分钟走 0.5 度
# 使用 hour % 12 将 12 点归零
hour_angle = (hour % 12) * 30 + minutes * 0.5
# 计算两个角度的绝对差值
diff = abs(hour_angle - minutes_angle)
# 返回较小的夹角
return diff if diff <= 180 else 360 - diff复杂度分析
- 时间复杂度:
。计算过程仅包含基本的算术运算。 - 空间复杂度:
。只使用了常数个辅助变量。