9. Palindrome Number(回文数)
题目:
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121 输出: true
示例 2:
输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10 输出: false 解释: 从右向左读, 为 01 。因此它不是一个回文数。
进阶:
你能不将整数转为字符串来解决这个问题吗?
思路:
正常方法就是对于数进行判断,第一个和最后一个对比,一直对比到中间一个或两个,这种方法采用整数转字符串效率较高。
考虑到进阶,使用转置方法较好,但是这个可能会越界超出int的范围(我真没想到),所以参考了一波别人的思路,只转置一半的数字,就不会越界了(真是个小机灵鬼)。并且数字如果为负数,不会是回文,如果个位是0并且数不为0,也不会回文。并且最后判断的时候,考虑到了奇偶数位,减少了一步判断操作。
代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public static boolean isPalindrome(int x) 2 { 3 String str = s+""; 4 int len = str.length(); 5 for (int j = 0; j < len/2; j++) 6 if (str.charAt(j) != str.charAt(len-j-1)) 7 return false; 8 return true; 9 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public static boolean isPalindrome(int x) 2 { 3 if(x < 0 || (x % 10 == 0 && x != 0)) 4 { 5 return false; 6 } 7 int num = 0; 8 while(x > num) 9 { 10 num = num * 10 + x % 10; 11 x = x/10; 12 } 13 14 return x == num || x == num/10; 15 }