Saya tidak melihat jawaban yang memecahkan masalah ini tanpa menggunakan ruang tambahan, yaitu, semua solusi yang saya lihat menggunakan string, atau integer lain untuk membalikkan angka, atau beberapa struktur data lainnya.
Meskipun bahasa seperti Java membungkus integer overflow, perilaku ini tidak terdefinisi dalam bahasa seperti C. ( Coba membalikkan 2147483647 (Integer.MAX_VALUE) di Jawa )
Penyelesaiannya bisa dengan menggunakan panjang atau sesuatu tetapi, secara stylistically, saya tidak cukup seperti pendekatan itu.
Sekarang, konsep bilangan palindromik adalah bilangan tersebut harus membaca maju dan mundur yang sama. Bagus. Dengan menggunakan informasi ini, kita dapat membandingkan digit pertama dan digit terakhir. Triknya, untuk digit pertama, kita perlu urutan nomornya. Katakanlah, 12321. Membagi ini dengan 10.000 akan memberi kita yang pertama. 1. Trailing 1 dapat diambil dengan mengambil mod dengan 10. Sekarang, untuk mengurangi ini ke 232 (12321 % 10000)/10 = (2321)/10 = 232
.. Dan sekarang, 10000 perlu dikurangi dengan faktor 2. Jadi, sekarang ke kode 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;
}
Diedit sesuai saran Hardik untuk membahas kasus-kasus di mana ada nol dalam jumlah.