Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.判断一个整数是不是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是同样的整数。
连接:https://leetcode-cn.com/probl...java
Input: 121 Output: trueInput: -121 Output: false
Explanation: From left to right, it reads -121. From right to left, it becomes 121-. Therefore it is not a palindrome.uiInput: 10 Output: false
Explanation: Reads 01 from right to left. Therefore it is not a palindrome.spa
1.比较直观想到的就是转换成字符串作反转操做。
2.题设建议是不要用转换字符串的方式去作,那么我想到的思路是先考虑一些边界状况,好比说:code
去掉一些边界状况,将指望将整个数进行反转,若是反转后的数字和原始数字相同,那么这个数字就是回文。例如,输入 1221,咱们能够将数字 1221,整个反转为1221,并对两个数字进行比较,若是相同的话,就是回文。blog
这个逆转的操做,对于数字1221,能够首先执行1221%10的操做获得1,而后要获得倒数第二个数字,能够将1221除以10,再求余数获得,同时将最后一位数字乘以10再加上倒数第二位的数字,那么就是1*10+2 = 12,就获得了想要的结果,以此类推,就获得了逆转后的数字了。leetcode
首先是前面第一和第二种的解法rem
java版本字符串
// 直接字符串反转求解 class Solution { public boolean isPalindrome(int x) { String result = new StringBuilder(x + "").reverse().toString(); return result.equals(String.valueOf(x)); } }
class Solution { public boolean isPalindrome(int x) { if (x < 0 ) { return false; } int originX = x; int reverseNum = 0; while(x != 0) { reverseNum = reverseNum * 10 + x %10; x = x/ 10; } return originX == reverseNum; } }
官方还给了一种题解
官方给的题解是只须要求一半的数字便可,好比说1221,那么求到下半部分12,发现和上半部分12相等,便可退出,好比说12321,那么求到下半部分123,发现比12打,那么就退出,若是是非回文,那么只要下半部数比上半部数打时便可退出循环。get
不过我感受官方给的题解,不是很好理解,可是他这边考虑了可能彻底逆转会有溢出的问题,从时间效率上来讲和第二种差异不大。it
class Solution { public boolean isPalindrome(int x) { if (x < 0 ) { return false; } if (x % 10 ==0 && x!=0) { return false; } int reverseNum = 0; while(x > reverseNum) { reverseNum = reverseNum * 10 + x %10; x = x/ 10; } return x == reverseNum || x == reverseNum/10; } }