力扣-回文数

7 阅读1分钟

回文数:给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。

bool isPalindrome(int x) {

if (x < 0 || (x != 0 && x % 10 == 0)) {
    return false;
}

int rev = 0;
// 核心:反转一半数字
while (x > rev) {
    rev = rev * 10 + x % 10;
    x /= 10;
}

// 判断回文
return rev == x || rev / 10 == x;

}

这段代码采用反转一半数字的巧妙思路判断回文数:首先排除负数和以0结尾的正数(0除外)这两种肯定不是回文数的情况。核心算法中,将原数字不断除以10缩减,同时将取出的末位数字逐步构建成反转数,但只反转一半就停止——当原数字小于或等于反转数时,说明已处理完一半位数。最后比较两种情况:对于偶数位数字,反转数应等于剩余原数;对于奇数位数字,去掉反转数的最后一位(中间数字)后应与剩余原数相等。

代码简洁,但存在深层的逻辑缺陷,没有深度实践,就觉得代码已经没有缺陷了