मान लीजिए हमारे पास एक संख्या n है, हमें n से छोटी या बराबर सबसे बड़ी संख्या ढूंढनी है जिसके सभी अंक नॉन-डिक्रीजिंग क्रम में हैं।
उदाहरण के लिए, यदि इनपुट n = 221 है, तो आउटपुट 199 होगा।
समाधान दृष्टिकोण
इसे हल करने के लिए हम निम्नलिखित चरणों का पालन करेंगे:
digits := nके सभी अंकों की सूचीbound := nulliकोlen(digits)-1से 0 तक घटाते हुए:- यदि
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 is not None:
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