ধরুন আমাদের কাছে 4 ডিজিটের একটি অ্যারে আছে, আমাদেরকে সবচেয়ে বড় 24-ঘন্টা সময় বের করতে হবে যা তৈরি করা যেতে পারে। আমরা জানি যে 24-ঘন্টার ক্ষুদ্রতম সময় হল 00:00, এবং বৃহত্তম সময় হল 23:59৷ 00:00 থেকে শুরু করে, মধ্যরাত থেকে আরও বেশি সময় অতিবাহিত হলে একটি সময় বড় হয়৷ আমাদের উত্তরটি 5 দৈর্ঘ্যের স্ট্রিং হিসাবে ফেরত দিতে হবে। যদি ফেরত দেওয়ার কোন বৈধ সময় না থাকে, তাহলে একটি খালি স্ট্রিং ফেরত দিন।
সুতরাং, যদি ইনপুটটি [1,2,3,4] এর মত হয়, তাহলে আউটপুট হবে "23:41"
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- একটি ফাংশন isValid() সংজ্ঞায়িত করুন, এটি একটি স্ট্রিং নেবে,
- যদি a[0]> '2' হয়, তাহলে −
- মিথ্যে ফেরত দিন
- যদি a[0] '2' এবং a[1]> '3' হয়, তাহলে −
- মিথ্যে ফেরত দিন
- যদি a[3]> '5' হয়, তাহলে −
- মিথ্যে ফেরত দিন
- সত্যে ফিরে আসুন
- একটি ফাংশন সংজ্ঞায়িত করুন dfs(), এটি একটি অ্যারে A, res, cur,
- যদি cur এর আকার 5 এর সমান হয়, তাহলে −
- যদি Valid(cur) এবং cur> res হয়, তাহলে −
- res :=cur
- প্রত্যাবর্তন
- যদি Valid(cur) এবং cur> res হয়, তাহলে −
- আরম্ভ করার জন্য i :=0, যখন i <4, আপডেট করুন (i 1 দ্বারা বৃদ্ধি করুন), −
- করুন
- যদি A[i] -1 এর সমান না হয়, তাহলে −
- tmp :=A[i]
- cur :=cur + A[i] + ASCII of '0'
- যদি cur এর আকার 2 এর সমান হয়, তাহলে −
- cur :=cur concatenate with ':'
- A[i] :=-1
- dfs(A, res, cur)
- A[i] :=tmp
- cur থেকে শেষ উপাদান মুছুন
- যদি cur এর আকার 2 এর সমান হয়, তাহলে −
- cur থেকে শেষ উপাদান মুছুন
- যদি A[i] -1 এর সমান না হয়, তাহলে −
- প্রধান পদ্ধতি থেকে নিম্নলিখিতগুলি করুন -
- res :=খালি স্ট্রিং, tmp :=খালি স্ট্রিং
- dfs(A, res, tmp)
- রিটার্ন রিটার্ন
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
#include <bits/stdc++.h> using namespace std; class Solution { public: void dfs(vector<int>& A, string& res, string& cur) { if (cur.size() == 5) { if (isValid(cur) && cur > res) res = cur; return; } for (int i = 0; i < 4; ++i) { if (A[i] != -1) { int tmp = A[i]; cur += A[i] + '0'; if (cur.size() == 2) cur += ':'; A[i] = -1; dfs(A, res, cur); A[i] = tmp; cur.pop_back(); if (cur.size() == 2) cur.pop_back(); } } } bool isValid(const string a) { if (a[0] > '2') return false; if (a[0] == '2' && a[1] > '3') return false; if (a[3] > '5') return false; return true; } string largestTimeFromDigits(vector<int>& A) { string res = "", tmp = ""; dfs(A, res, tmp); return res; } }; main(){ Solution ob; vector<int> v = {1,2,3,4}; cout << (ob.largestTimeFromDigits(v)); }
ইনপুট
{1,2,3,4}
আউটপুট
23:41