📘 題目敘述
給你兩個數字 hour 與 minutes。
請你回傳「時針」與「分針」之間的最小角度(以度數表示)。
答案的相對誤差需小於 10^-5 才會被接受。
條件限制
1 <= hour <= 120 <= minutes <= 59
🧠 解題思路
我把時針角度跟分針角度都換成「相對 12 點方向的度數」,最後取兩者差的較小夾角。
- 分針角度
- 分針一圈 360 度,共 60 分鐘
- 每分鐘走
360 / 60 = 6度 - 所以分針角度
m = minutes * 6
- 時針角度
- 時針一圈 360 度,共 12 小時
- 每小時走
360 / 12 = 30度 - 所以先有
30 * hour - 但時針會隨分鐘前進:每分鐘走
30 / 60 = 0.5度 - 所以再加上
minutes * 0.5 = minutes / 2 - 時針角度
h = 30 * hour + minutes / 2
- 最小角度
- 兩者差值
d = abs(h - m) - 另一個方向的角度是
360 - d - 取
min(d, 360 - d)就是最小角度
- 兩者差值
所有變數
hour:輸入的小時(1 到 12)minutes:輸入的分鐘(0 到 59)h:時針相對 12 點方向的角度(度數)m:分針相對 12 點方向的角度(度數)
🪜 主要流程步驟
1. 把分針換成角度
m = minutes * 6
2. 把時針換成角度(包含分鐘帶來的偏移)
h = 30 * hour + (double)minutes / 2
3. 計算兩針的差值並取最小夾角
d = abs(h - m)- 回傳
min(d, 360 - d)
💻 程式碼實作
class Solution {
public:
double angleClock(int hour, int minutes) {
double h, m;
m = minutes * 6;
h = 30 * hour + ((double)minutes / 2);
return min(abs(h - m), 360 - abs(h - m));
}
};
🔗 題目連結
https://leetcode.com/problems/angle-between-hands-of-a-clock/