Сложность: medium
Учитывая массив arr из 4 цифр, найдите самое позднее 24-часовое время, которое можно составить, используя каждую цифру ровно один раз. 24-часовое время имеет формат "ЧЧ:ММ", где ЧЧ - от 00 до 23, а ММ - от 00 до 59. Самое раннее 24-часовое время - 00:00, а самое позднее - 23:59. Верните самое позднее 24-часовое время в формате "HH:MM". Если не удается определить действительное время, возвращается пустая строка.
Пример:
Input: arr = [1,2,3,4]
Output: "23:41"
👨💻 Алгоритм:
1⃣Перебрать все возможные перестановки массива arr.
2⃣Проверить каждую перестановку, можно ли из нее составить допустимое 24-часовое время.
Найти самое позднее допустимое время среди всех перестановок.
3⃣Алгоритм
Перебрать все возможные перестановки массива arr.
Проверить каждую перестановку, можно ли из нее составить допустимое 24-часовое время.
Найти самое позднее допустимое время среди всех перестановок.
Вернуть найденное время в формате "HH
". Если допустимое время не найдено, вернуть пустую строку.
😎 Решение:
class Solution {
func largestTimeFromDigits(_ arr: [Int]) -> String {
var maxTime = -1
let permutations = permute(arr)
for perm in permutations {
let hours = perm[0] * 10 + perm[1]
let minutes = perm[2] * 10 + perm[3]
if hours < 24 && minutes < 60 {
maxTime = max(maxTime, hours * 60 + minutes)
}
}
if maxTime == -1 {
return ""
}
return String(format: "%02d:%02d", maxTime / 60, maxTime % 60)
}
private func permute(_ nums: [Int]) -> [[Int]] {
var res = [[Int]]()
var nums = nums
backtrack(&nums, &res, 0)
return res
}
private func backtrack(_ nums: inout [Int], _ res: inout [[Int]], _ start: Int) {
if start == nums.count {
res.append(nums)
return
}
for i in start..<nums.count {
nums.swapAt(start, i)
backtrack(&nums, &res, start + 1)
nums.swapAt(start, i)
}
}
}Ставь 👍 и забирай 📚 Базу знаний