मैंने बिना किसी अतिरिक्त स्थान का उपयोग किए, इस समस्या को हल करने वाले किसी भी उत्तर पर ध्यान नहीं दिया, अर्थात, मेरे द्वारा देखे गए सभी समाधानों में संख्या को उलटने के लिए एक स्ट्रिंग, या किसी अन्य पूर्णांक का उपयोग किया गया, या कुछ अन्य डेटा संरचनाएँ।
हालाँकि जावा जैसी भाषाएँ पूर्णांक ओवरफ़्लो पर चारों ओर लिपटी रहती हैं, लेकिन यह व्यवहार सी जैसी भाषाओं में अपरिभाषित है (Java में 2147483647 (Integer.MAX_VALUE) को उलट
कर देखें ) वर्कअराउंड लंबे या कुछ और का उपयोग करने के लिए हो सकता है लेकिन, शैलीगत रूप से, मैं काफी नहीं हूं उस दृष्टिकोण की तरह।
अब, एक palindromic संख्या की अवधारणा यह है कि संख्या को आगे और पीछे एक ही पढ़ना चाहिए। महान। इस जानकारी का उपयोग करके, हम पहले अंक और अंतिम अंक की तुलना कर सकते हैं। ट्रिक है, पहले अंक के लिए, हमें संख्या के क्रम की आवश्यकता है। कहते हैं, 12321। इसे 10000 से विभाजित करने पर हमें अग्रणी 1 मिलेगा। ट्रेलिंग 1 को मॉड के साथ 10. प्राप्त करके इसे 232 तक कम करने के लिए पुनः प्राप्त किया जा सकता है (12321 % 10000)/10 = (2321)/10 = 232
। और अब, 10000 को 2 के कारक से कम करना होगा। इसलिए, अब जावा कोड पर ...
private static boolean isPalindrome(int n) {
if (n < 0)
return false;
int div = 1;
// find the divisor
while (n / div >= 10)
div *= 10;
// any number less than 10 is a palindrome
while (n != 0) {
int leading = n / div;
int trailing = n % 10;
if (leading != trailing)
return false;
// % with div gets rid of leading digit
// dividing result by 10 gets rid of trailing digit
n = (n % div) / 10;
// got rid of 2 numbers, update div accordingly
div /= 100;
}
return true;
}
उन मामलों को कवर करने के लिए हार्दिक के सुझाव के अनुसार संपादित किया गया जहां संख्या में शून्य हैं।