মান লক্ষ্য করুন আমাদের কাছে একটি সংখ্যা n আছে। আমাদের কাজ হল n-এর চেয়ে ছোট বা সমান এমন সবচেয়ে বড় সংখ্যা খুঁজে বের করা যাতে তার সব ডিজিট নন-ডিক্রিজিং অর্ডারে থাকে (অর্থাৎ প্রতিটি ডিজিট তার আগের ডিজিটের চেয়ে ছোট নয়)।
উদাহরণস্বরূপ, যদি ইনপুট হয় n = 221, তবে আউটপুট হবে 199।
digits := n-র সব ডিজিট দিয়ে একটি তালিকাbound := nulliকেlen(digits)-1থেকে ০ পর্যন্ত লুপ চালান:- যদি
digits[i] < digits[i-1]হয়, তবে:bound := idigits[i-1] := digits[i-1] - 1
- যদি
boundনাল না হয়, তবে:iকেboundথেকেlen(digits)পর্যন্ত লুপ চালান:digits[i] := 9
- যদি
digits-এর সব ডিজিট জয়েন করে একটি সংখ্যা বানিয়ে রিটার্ন করুন।
class Solution:
def solve(self, n):
digits = [int(x) for x in str(n)]
bound = None
for i in range(len(digits) - 1, 0, -1):
if digits[i] < digits[i - 1]:
bound = i
digits[i - 1] -= 1
if bound:
for i in range(bound, len(digits)):
digits[i] = 9
return int("".join(map(str, digits)))
ob = Solution()
n = 221
print(ob.solve(n))
221
199