9题 回文数
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
第一种方式
利用StringBulider的reverse方法
public class Test2 {
//1.利用数字转化成字符串来解决这个问题,利用StringBuilder的反转方法reverse
public boolean isPalindrome(int x) {
String xStr = String.valueOf(x);
StringBuilder sb = new StringBuilder(xStr);
if(sb.reverse().toString(). equals(xStr)){
return true;
}
return false;
}
第二种方式
利用数学的方式来实现 以回文数12321来做示例
1.首先获取这个数字是几位数 用int bit来记录
可以利用Math.log10() 这个方法来获取 获取的值为 位数-1 (log10为高中数学知识 对数函数)
12321是5位 所以 bit = 4;
2.判断第一位和最后一位是否相等
.求最后一位的值的方法 可以用 %10 取余 的方法
int last = 12321%10 此处 last=1
Math.pow(10,bit) 就是指10的bit次方 此处为10的4次方 即10000
用12321/10000就可以取得第一个值即 1
int first =(int) (12321/Math.pow(10,bit))
判断是否相等 如果不等就返回false
if(first!=last){
return false;
}
3. 如何去除头尾
用 12321%10000=2321 2321/10=232
即12321%10000/10=232
因为数字短了两位 所以将bit-2
进入下一次循环
下面看代码
public static boolean isPalindrome2(int x) {//2.不用字符串来解决该问题
if(x<0){//如果X小于0 则必定不是回文数
return false;
}
int bit =(int) Math.log10((double) x);//获取当前数的位数 4
while(x!=0){
//找到第一个数和最后一个数
int first =(int) (x/Math.pow(10,bit));//首位为1
int last = x%10;//末位为1
if(first!=last){//判断是否相等
return false;
}
//将x去头去尾巴
x =(int) (x%(Math.pow(10,bit))/10);
bit = bit-2;
}
return true;
}