题目:
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
例如,121 是回文,而 123 不是。
示例 1:
输入:x = 121
输出:true
示例 2:
输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。
来源:力扣(LeetCode)
巧解:(这种方法相对于暴力要好很多)
取巧方法
1、5443 记录后一半的翻转34 ,然后判断是否和前一半的数据是否一致。
2、54443 记录后一半的翻转 34,然后判断是否和前一半的数据是否一致。
public static boolean isPalindrome(int x){
if(x==0){
return true;
}
if(x < 0 || x % 10==0){
return false;
}
int reversed = 0;
while (x>reversed){
reversed = reversed * 10 +x %10;
x = x/10;
}
return reversed==x||reversed/10==x;
}
暴力解法
//暴力解法
public static boolean isisPalindrome(int x){
boolean b = true;
String str = x+"";
char [] ch = str.toCharArray();
//负数扔出去
if(x < 0){
return false;
}
//个位数扔出去
if(x >= 0&&x <= 9){
return true;
}
if(x>9){
int length = ch.length;
for(int i = 0 ;i <length/2;i++){
if(ch[i]!=ch[ch.length-1-i]){
b = false;
}
}
}
return b;
}
暴力解法(使用api里的方法,相对以上方法都慢)
//暴力解法,使用stringbuffer直接reverse翻转(最慢)
public static boolean isPalindromes(int x){
if(x < 0) return false;
StringBuffer sb = new StringBuffer(String.valueOf(x));
return sb.reverse().toString().equals(String.valueOf(x));
}