这是我参与「掘金日新计划 · 2 月更文挑战」的第 25 天,点击查看活动详情
问题描述
给你两个数 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 <= 12
0 <= minutes <= 59
- 与标准答案误差在
10^-5
以内的结果都被视为正确结果。
思路分析
首先我们先要理解一下题目意思,题目会给我们两个数字,分别代表小时和分钟,我们需要计算在给点时间下的时针和分针之间的夹角,夹角我们取较小的一个。首先我们应该分析一下时间与角度的关系:
- 小时
每 12 个小时时针会转满一圈,也就是转动 360 度,那么每一个小时时针转动的角度就会是360 / 12 = 30°
,所以每过n
个小时,时针会转动n * 30°
。
- 分钟
每 60 分钟分针会转满一圈,也就是转动 360 度,那么我们可以求得每一分钟分钟的转动角度为360 / 60 = 6°
,所以每过n
分钟,分针会转动n * 6°
;
这里需要注意的是,分钟也会对时针的角度造成影响,一个小时时针转动30度
,也就是说 60 分钟转动30度
,即是每分钟转动30 / 60 = 0.5°
。
- 时针转动角度
按照前面得出结论进行计算即可:
let hd = hour * 30 + minutes / 2;
- 分针转动角度
按照前面得出结论进行计算即可:
let md = minutes * 6;
- 计算夹角
夹角我们应该取较小的一个,两边的夹角之和为360°,我们知道一个角的度数之后即可知道另一个叫的度数:
Math.min(Math.abs(md - hd), 360 - Math.abs(md - hd));
完整 AC 代码如下:
AC 代码
/**
* @param {number} hour
* @param {number} minutes
* @return {number}
*/
var angleClock = function (hour, minutes) {
let hd = hour * 30 + minutes / 2;
let md = minutes * 6;
return Math.min(Math.abs(md - hd), 360 - Math.abs(md - hd));
};
说在后面
本人为算法业余爱好者,平时只是随着兴趣偶尔刷刷题,如果上面分享有错误的地方,欢迎指出,感激不尽。