मान लीजिए हमारे पास एक संख्या 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 := s[0 से i तक का सूचकांक] का संख्यात्मक मान + 1
- यदि 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