मान लीजिए कि हमारे पास "hh:mm" प्रारूप में 24 घंटे की स्ट्रिंग है, तो हमें अगला निकटतम समय ज्ञात करना होगा जो दिए गए अंकों का पुन:उपयोग करके बनाया जा सकता है। हम दी गई स्ट्रिंग से अंकों को जितनी बार चाहें पुन:उपयोग कर सकते हैं।
इसलिए, यदि इनपुट s ="03:15" जैसा है, तो आउटपुट 03:30 होगा, निकटतम समय 03:30 जो दिए गए अंकों को दोहराता है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे:
- उपयोग :=दो अंकों की घंटे और दो अंकों की मिनट के मान वाली एक सूची
- संभव:=एक नया सेट
- एक फ़ंक्शन को परिभाषित करें backtrack() । यह रास्ता लेगा
- यदि पथ का आकार 4 के समान है, तो
- (पथ [पहले दो अंक] ":" को जोड़ना पथ [अंतिम दो अंक]) और इसे संभव में सम्मिलित करें।
- वापसी
- उपयोग में प्रत्येक p के लिए, करें
- अगर (पथ का आकार 0 और p>
"2" के समान है) गलत है और (पथ "2" के समान है और p>
"3") गलत है और (पथ का आकार 2 और p के समान है)> "5") गलत है, तो
- बैकट्रैक (पथ + पी)
- अगर (पथ का आकार 0 और p>
"2" के समान है) गलत है और (पथ "2" के समान है और p>
"3") गलत है और (पथ का आकार 2 और p के समान है)> "5") गलत है, तो
- मुख्य विधि से निम्न कार्य करें:
- बैकट्रैक(रिक्त स्ट्रिंग)
- संभव:=संभव से एक नई सूची
- संभव सूची को क्रमबद्ध करें
- मैं के लिए 0 से संभव के आकार के लिए - 2, करते हैं
- यदि संभव हो तो[i] s के समान है, तो
- वापसी संभव[i + 1]
- यदि संभव हो तो[i] s के समान है, तो
- वापसी संभव है[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