मान लीजिए हमारे पास एक संख्या n है, हमें अगला निकटतम मान ढूंढना है जहां सभी अंक विषम हों। जब दो मान n के निकटतम होने के लिए बंधे हों, तो बड़ा वाला लौटाएं।
तो, अगर इनपुट n = 243 है, तो आउटपुट 199 होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे:
- first_even := -1
- s := n को स्ट्रिंग के रूप में
- l := s का आकार
- i को 0 से l तक के लिए, करें
- अगर s[i] सम है, तो
- first_even := i
- लूप से बाहर आएं
- अगर s[i] सम है, तो
- अगर first_even -1 के समान है, तो
- n लौटाएं
- big := 1 + s[इंडेक्स 0 से i तक] का संख्यात्मक मान
- अगर s[i] "0" के समान है, तो
- अगर s[i-1] "1" के समान है, तो
- small := s[इंडेक्स 0 से i तक] का संख्यात्मक मान - 1
- अन्यथा,
- small := s[इंडेक्स i से i+1 तक] का संख्यात्मक मान - 11
- अगर s[i-1] "1" के समान है, तो
- अन्यथा,
- small := s[इंडेक्स 0 से i तक] का संख्यात्मक मान - 1
- i को i+1 से l तक के लिए, करें
- big := big के साथ "1" जोड़ें
- small := small के साथ "9" जोड़ें
- big := big का संख्यात्मक मान, small := small का संख्यात्मक मान
- d2 := big - n, d1 := n - small
- अगर d1 < d2, तो
- small लौटाएं
- अन्यथा जब d1 >= d2, तो
- big लौटाएं
बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें:
उदाहरण
class Solution:
def solve(self, n):
first_even = -1
s = str(n)
l = len(s)
for i in range(l):
if int(s[i]) % 2 == 0:
first_even = i
break
if first_even == -1:
return n
big = str(int(s[:i+1]) + 1)
if s[i] == "0":
if s[i-1] == "1":
small = str(int(s[:i+1]) - 1)
else:
small = str(int(s[i:i+1]) - 11)
else:
small = str(int(s[:i+1]) - 1)
for i in range(i+1, l):
big += "1"
small += "9"
big, small = int(big), int(small)
d2 = big - n
d1 = n - small
if d1 < d2:
return small
elif d1 >= d2:
return big
ob = Solution()
n = 243
print(ob.solve(n))
इनपुट
243
आउटपुट
199