Skip to content

时钟指针的夹角

Posted on:2022年3月20日 at 23:23

给你两个数 hourminutes 。请你返回在时钟上,由给定时间的时针和分针组成的较小角的角度(60 单位制)。

示例 1:

image.png

输入: hour = 12, minutes = 30

输出: 165

示例 2:

image.png

输入: hour = 3, minutes = 30

输出; 75

示例 3:

image.png

输入: hour = 3, minutes = 15

输出: 7.5

示例 4:

输入: hour = 4, minutes = 50

输出: 155

示例 5:

输入: hour = 12, minutes = 0

输出: 0

提示:

/**
 * @param {number} hour
 * @param {number} minutes
 * @return {number}
 */
var angleClock = function (hour, minutes) {};

解题思路

以12点为界限来计算角度,首先计算时针到12点的角度,就等于整数点数模12(因为12应该取0)加上分钟/60在乘上360/12。比如12:30 就是(0+1/2)360/12=15度。

在计算分钟到12点的角度,就是分钟数360/60。之后求这两个角度差的绝对值就是夹角,如果夹角大于180则再求一次补角返回即可。

代码

/**
 * @param {number} hour
 * @param {number} minutes
 * @return {number}
 */
var angleClock = function (hour, minutes) {
  // 每分移动6°
  let oneMinAngle = 6;
  // 每小时移动30°
  let oneHourAngle = 30;
  // 分针移动的角度
  let minutesAngle = oneMinAngle * minutes;
  // 时针移动的角度 并且防止12点 所以 hour % 12
  let hourAngle = ((hour % 12) + minutes / 60.0) * oneHourAngle;
  // 用时针的角度减去分针的角度,得其绝对值
  let diff = Math.abs(hourAngle - minutesAngle);
  // 返回最小值
  return Math.min(diff, 360 - diff);
};
原文转自:https://fe.ecool.fun/topic/bab18dbe-9168-4ef5-a1d7-e063a762cf50