ধরুন আমাদের কাছে "hh:mm" বিন্যাসে একটি 24-ঘন্টা স্ট্রিং আছে, আমাদের পরবর্তী নিকটতম সময়টি খুঁজে বের করতে হবে যা প্রদত্ত সংখ্যাগুলি পুনরায় ব্যবহার করে গঠন করা যেতে পারে। আমরা প্রদত্ত স্ট্রিং থেকে সংখ্যাগুলি যতবার চাই ততবার পুনঃব্যবহার করতে পারি।
সুতরাং, যদি ইনপুটটি s ="03:15" এর মত হয়, তাহলে আউটপুট হবে 03:30, নিকটতম সময় হিসাবে 03:30 যা প্রদত্ত সংখ্যাগুলি পুনরাবৃত্তি করে৷
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব:
- ব্যবহার করুন :=দুই অঙ্কের ঘন্টা এবং দুই অঙ্কের মিনিট মান সহ একটি তালিকা
- সম্ভব :=একটি নতুন সেট
- একটি ফাংশন ব্যাকট্র্যাক() সংজ্ঞায়িত করুন। এটি পথ গ্রহণ করবে
- পাথের আকার যদি 4 এর মত হয়, তাহলে
- (পাথ[প্রথম দুই অঙ্ক] কনক্যাটেনেট ":" সংযোজিত পথ [শেষ দুটি সংখ্যা]) এবং এটি সম্ভাব্য মধ্যে সন্নিবেশ করান।
- প্রত্যাবর্তন
- ব্যবহৃত প্রতিটি পি এর জন্য, করুন
- যদি (পাথের আকার 0 এবং p>
"2" এর মতো) মিথ্যা এবং (পাথ "2" এবং p>
"3" এর মতো) মিথ্যা এবং (পাথের আকার 2 এবং p এর মতো> "5") মিথ্যা, তারপর
- ব্যাকট্র্যাক(পথ + p)
- যদি (পাথের আকার 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