Сложность: medium
Дано время, представленное в формате "ЧЧ:ММ". Сформируйте ближайшее следующее время, используя текущие цифры. Количество раз, которое можно использовать цифру, не ограничено.
Можно предположить, что заданная строка всегда корректна. Например, "01:34", "12:09" являются корректными. "1:34", "12:9" являются некорректными.
Пример:
Input: time = "19:34"
Output: "19:39"
Explanation: The next closest time choosing from digits 1, 9, 3, 4, is 19:39, which occurs 5 minutes later.
It is not 19:33, because this occurs 23 hours and 59 minutes later.
👨💻 Алгоритм:
1⃣Симулируйте ход часов, увеличивая время на одну минуту. Каждый раз, когда время увеличивается, если все цифры допустимы, верните текущее время.
2⃣Представьте время как целое число t в диапазоне 0 <= t < 24 * 60. Тогда часы равны t / 60, минуты равны t % 60.
3⃣Найдите каждую цифру часов и минут: часы / 10, часы % 10 и т.д.
😎 Решение:
class Solution {
function nextClosestTime($time) {
$cur = 60 * intval(substr($time, 0, 2)) + intval(substr($time, 3));
$allowed = [];
foreach (str_split($time) as $c) if ($c != ':') {
$allowed[$c] = true;
}
while (true) {
$cur = ($cur + 1) % (24 * 60);
$digits = [intval($cur / 60 / 10), intval($cur / 60 % 10), intval($cur % 60 / 10), intval($cur % 60 % 10)];
$isValid = true;
foreach ($digits as $d) {
if (!isset($allowed[$d])) {
$isValid = false;
break;
}
}
if ($isValid) {
return sprintf("%02d:%02d", intval($cur / 60), intval($cur % 60));
}
}
}
}Ставь 👍 и забирай 📚 Базу знаний