मान लीजिए कि हमारे पास एक संख्या n है, हमें निकटतम संख्या प्राप्त करनी है जो पैलिंड्रोम है। तो पैलिंड्रोम उस संख्या से कम या अधिक हो सकता है जिसका पूर्ण अंतर छोटा है। तो अगर संख्या 145 की तरह है, तो परिणाम 141 होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- sn :=n का आकार
- यदि sn 1 के समान है, तो −
- n[0] को 1 से घटाएं और 1s आकार n[0] की एक स्ट्रिंग लौटाएं
- आधा_sn :=(sn + 1) / 2
- हाफ_वल:=स्टोल (इंडेक्स 0 से हाफ_एसएन तक n का सबस्ट्रिंग
- एक सरणी उम्मीदवारों को परिभाषित करें ={10^(sn) - 1, 10^(sn - 1) - 1, 10^(sn - 1) + 1, 10^(sn)+1
- एक सरणी परिभाषित करें fmdc ={ आधा_वल, आधा_वल - 1, आधा_वल + 1}
- fmds में प्रत्येक मान c के लिए
- रेव :=c को स्ट्रिंग में बदलें
- यदि sn mod 2 गैर-शून्य है, तो −
- Rev से अंतिम तत्व हटाएं
- रिवर्स रेव रिवर्स
- उम्मीदवारों के अंत में c डालें
- सरणी उम्मीदवारों को क्रमबद्ध करें
- वैल:=n पूर्णांक के रूप में
- उम्मीदवारों में प्रत्येक उम्मीदवार के लिए -
- यदि उम्मीदवार वैल के समान है, तो −
- निम्न भाग पर ध्यान न दें, अगले भाग पर जाएं
- diff :=abs|उम्मीदवार - वैल|
- यदि भिन्न
- min_diff :=diff
- उत्तर:=उम्मीदवार को स्ट्रिंग में बदलें
- यदि उम्मीदवार वैल के समान है, तो −
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
#include <bits/stdc++.h> using namespace std; class Solution { public: string nearestPalindromic(string n) { int sn = n.size(); if(sn == 1){ return string(1, --n[0]); } int half_sn = (sn+1)/2; long half_val = stol(n.substr(0, half_sn)); vector<long> candidates = {pow(10, sn)-1, pow(10, sn-1)-1, pow(10, sn-1)+1, pow(10, sn)+1}; vector <long> fmdc = {half_val, half_val-1,half_val+1}; for(long c:fmdc){ string rev = to_string(c); if(sn%2)rev.pop_back(); reverse(rev.begin(),rev.end()); candidates.push_back(stol(to_string(c) + rev)); } sort(candidates.begin(), candidates.end()); string ans; long val = stol(n), min_diff = INT_MAX; for(long candidate : candidates){ if(candidate == val)continue; long diff = labs(candidate - val); if(diff < min_diff){ min_diff = diff; ans = to_string(candidate); } } return ans; } }; main(){ Solution ob; cout << (ob.nearestPalindromic("145")); }
इनपुट
“145”
आउटपुट
141