1.题目描述:
- 回文数:
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
2.代码实现:
1.将整数转换为字符串:
相当于双指针,同时从头部和尾部开始索引查询、对比。
class Solution {
public boolean isPalindrome(int x) {
//负数,大于0且个位数为0的数不是回文数
if(x<0 || (x!=0 && x%10==0)){
return false;
}
Boolean flag = true;
String s = Integer.toString(x);
int start = 0; //头部索引
int end = s.length()-1; //尾部索引
while(start<=end){ //当头部索引大于尾部索引时结束循环
if(s.charAt(start) != s.charAt(end)){
flag = false;
break;
}
start++;
end--;
}
return flag;
}
}
2.通过取余计算
思路:
一个回文数,中间对折,前后部分是对称的
所以取后半段数字进行翻转,就是前半段数字。
思路:
例: 134431
134431 % 10 = 1 取到最后一位数
134431 / 10 = 13443
13443 % 10 = 3 取到倒数第二位数
13443 / 10 = 1344
1344 % 10 = 4 取到倒数第三位数
...
翻转:
(1 * 10 + 3) * 10 + 4 = 143 完成翻转
回文数个数为偶数时:即前半部分 = 后半部分
回文数个数为奇数时:即前半部分 = 后半部分/10(去除掉多余的一位)
class Solution {
public boolean isPalindrome(int x) {
if(x<0 || (x!=0 && x%10==0)){
return false;
}
int reverseNum = 0;
while(x>reverseNum){
reverseNum = reverseNum*10+x%10;
x/=10;
}
return x == reverseNum || x==reverseNum/10;
}
}