मान लीजिए हमारे पास "hh:mm" प्रारूप में एक 24-घंटे की स्ट्रिंग है, हमें अगला निकटतम समय ढूंढना है जिसे दिए गए अंकों का पुन: उपयोग करके बनाया जा सके। हम दिए गए स्ट्रिंग के अंकों का जितनी बार चाहें उतनी बार पुन: उपयोग कर सकते हैं।
उदाहरण के लिए, यदि इनपुट s = "03:15" है, तो आउटपुट 03:30 होगा, क्योंकि निकटतम समय 03:30 दिए गए अंकों को दोहराता है।
इसे हल करने के लिए, हम निम्न चरणों का पालन करेंगे:
- use := दो अंकों के घंटे और दो अंकों के मिनट मानों वाली एक सूची
- possible := एक नया सेट
- एक फ़ंक्शन backtrack() परिभाषित करें। यह path लेगा
- यदि path का आकार 4 के समान है, तो
- (path[पहले दो अंक] जोड़ें ":" जोड़ें path[अंतिम दो अंक]) और इसे possible में डालें।
- लौटें
- प्रत्येक p के लिए use में, करें
- यदि (path का आकार 0 के समान है और p > "2") असत्य है और (path "2" के समान है और p > "3") असत्य है और (path का आकार 2 के समान है और p > "5") असत्य है, तो
- backtrack(path + p)
- यदि (path का आकार 0 के समान है और p > "2") असत्य है और (path "2" के समान है और p > "3") असत्य है और (path का आकार 2 के समान है और p > "5") असत्य है, तो
- मुख्य विधि से निम्न करें:
- backtrack(खाली स्ट्रिंग)
- possible := possible से एक नई सूची
- सूची possible को क्रमबद्ध करें
- i को 0 से possible के आकार - 2 तक के लिए, करें
- यदि possible[i], s के समान है, तो
- possible[i + 1] लौटाएं
- यदि possible[i], s के समान है, तो
- possible[0] लौटाएं
बेहतर समझ के लिए निम्न कार्यान्वयन देखें:
उदाहरण
class Solution:
def solve(self, s):
use = [s[0], s[1], s[3], s[4]]
possible = set()
def backtrack(path):
nonlocal possible, use
if len(path) == 4:
possible.add(path[:2] + ":" + path[2:])
return
for p in use:
if (not (len(path) == 0 and p > "2") and not (path == "2" and p > "3") and not (len(path) == 2 and p > "5")):
backtrack(path + p)
backtrack("")
possible = list(possible)
possible.sort()
for i in range(len(possible) - 1):
if possible[i] == s:
return possible[i + 1]
return possible[0]
ob = Solution()
s = "03:15"
print(ob.solve(s))
इनपुट
"03:15"
आउटपुट
03:30