Tôi không nhận thấy bất kỳ câu trả lời nào giải quyết vấn đề này khi không sử dụng thêm dung lượng, tức là tất cả các giải pháp tôi thấy hoặc đã sử dụng một chuỗi hoặc một số nguyên khác để đảo ngược số hoặc một số cấu trúc dữ liệu khác.
Mặc dù các ngôn ngữ như Java bao quanh tràn số nguyên, hành vi này không được xác định trong các ngôn ngữ như C. ( Thử đảo ngược 2147483647 (Integer.MAX_VALUE) trong Java )
Cách khắc phục có thể là sử dụng lâu dài hoặc một cái gì đó, nhưng về mặt phong cách, tôi không hoàn toàn như cách tiếp cận đó
Bây giờ, khái niệm về một số palindromic là số nên đọc cùng một tiến và lùi. Tuyệt quá. Sử dụng thông tin này, chúng ta có thể so sánh chữ số đầu tiên và chữ số cuối cùng. Thủ thuật là, đối với chữ số đầu tiên, chúng ta cần thứ tự của số. Giả sử, 12321. Chia số này bằng 10000 sẽ giúp chúng ta dẫn đầu 1. Có thể lấy ra dấu 1 bằng cách lấy mod với 10. Bây giờ, để giảm số này xuống 232 (12321 % 10000)/10 = (2321)/10 = 232
.. Và bây giờ, 10000 sẽ cần phải giảm đi 2 lần. Vì vậy, bây giờ với mã Java ...
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;
}
Được chỉnh sửa theo đề nghị của Hardik để bao gồm các trường hợp có số không trong số.