回文数的判定
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/palindrome-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121 输出: true
示例 2:
输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10 输出: false 解释: 从右向左读, 为 01 。因此它不是一个回文数。
进阶:
你能不将整数转为字符串来解决这个问题吗?(采用数学方法进行判断)
//解法1,直接StringBuffer的reverse反转方法反转,在进行equals进行判断public boolean isPalindrome(int x) {boolean flag = false;String string = x + "";String reverse = new StringBuffer(string).reverse().toString();//用字符串equals方法判断这两个字符串是否相等if (string.equals(reverse)) {flag = true;}return flag;}
解释:
1.整数转字符串可以使用:String string=整数num+"" ,这样就能将整数转换为字符串,用字符串中的方法了。
关于整数和字符串的转换可以参考这篇博客
2.StringBuffer的构造函数参数可以是String,StringBuffer包含一个reverse的方法(反转)
//解法2.通过取整和取余操作获取整数中对应的数字进行比较。
public boolean isPalindrome(int x) {//边界判断if (x < 0) return false; //负数肯定不是回文数,比如-1,反转之后就是1- 不满足题中条件int div = 1;while (x / div >= 10) div *= 10;while (x > 0) {int left = x / div;int right = x % 10;if (left != right) return false;x = (x % div) / 10;div /= 100;}return true;}
解释:
1.比如1221,第一个while循环的时候div结果是1000,这个div算是一个中间变量,可以通过它得到整数最高位和最低位。
2.那么在第二个循环while中第一次循环left为1221/1000,right为1221%10,x = (x % div) / 10;算是掐头去尾,将1221中最高位和最低位的1去掉,x的值位22,很有意思叭,div/=100,接着继续循环
(此算法非原创,来自leetcode题解-作者:程序员小吴)