ধরুন আমাদের একটি অ-ঋণাত্মক পূর্ণসংখ্যা N আছে, আমাদেরকে একঘেয়ে ক্রমবর্ধমান সংখ্যা সহ N-এর থেকে কম বা সমান বৃহত্তম সংখ্যাটি খুঁজে বের করতে হবে। আমরা জানি যে একটি পূর্ণসংখ্যার একঘেয়ে সংখ্যা বৃদ্ধি পায় যদি এবং শুধুমাত্র যদি প্রতিটি জোড়া সন্নিহিত সংখ্যার x এবং y সন্তুষ্ট করে x <=y।) তাই যদি ইনপুটটি 332 এর মত হয়, তাহলে ফলাফল 299 হবে।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- s :=স্ট্রিং হিসাবে N, i :=1, n :=s এর আকার
- যখন i
=s[i – 1] - i 1 দ্বারা বাড়ান
- যদি আমি
- যখন i> 0 এবং s[i – 1]> s[i], তারপর
- i 1 দ্বারা হ্রাস করুন
- s[i] 1 দ্বারা কমিয়ে দিন
- যখন i> 0 এবং s[i – 1]> s[i], তারপর
- পরিসরে j-এর জন্য
- s[j] :='9'
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int monotoneIncreasingDigits(int N) {
string s = to_string(N);
int i = 1;
int n = s.size();
while(i < n && s[i] >= s[i - 1]) i++;
if( i < n)
while(i > 0 && s[i - 1] > s[i]){
i--;
s[i]--;
}
for(int j = i + 1; j < n; j++)s[j] = '9';
return stoi(s);
}
};
main(){
Solution ob;
cout << (ob.monotoneIncreasingDigits(332));
} ইনপুট
332
আউটপুট
299