难度:简单
描述:
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
例如,121 是回文,而 123 不是。
示例 1:
输入:x = 121
输出:true
示例 2:
输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。
提示:
-231 <= x <= 231 - 1
进阶:你能不将整数转为字符串来解决这个问题吗?
方法:反转整数法。即取整取余按位乘十法
依次类推,实现整数的反转,然后对比即可。
根据分析过程中反转整数的思路,实现以下代码:
class Solution {
public boolean isPalindrome(int x) {
if(x<0){
return false;
}
//121 545 12021
int taget = x;
int revert = 0;
while(taget>0){
revert = revert * 10 + taget%10;
taget = taget/10;
}
if (revert == x){
return true;
}
return false;
}
}
进一步优化:考虑可能出现超出整数范围的可能,因此采用反转一半整数的方法进行求解:
class Solution {
public boolean isPalindrome(int x) {
// x为负数,或者个位数是0时 不是回文数
if(x < 0 || (x % 10 == 0 && x != 0)){
return false;
}
//121 545 12021
//反转一半的数字
int revert = 0;
while(x > revert){
revert = revert * 10 + x % 10;
x = x / 10;
}
//位数为偶数适用第一个条件,位数为奇数适用第二个条件
return revert == x || x == revert/10;
}
}
注意:这里需要单独考虑个位数字为0的情况。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/zhang_java_11/article/details/125477451
内容来源于网络,如有侵权,请联系作者删除!