Algorithm

  1. Revert half of the number
  2. 为了避免reversed number overflow,一个可行的做法是只revert一半的数,回文数的后一半应该是和前一半相同。
  3. 接下来的问题是我们如何知道我们处理到了一半数字:Since we divided the number by 10, and multiplied
  4. the reversed number by 10, when the original number is less than the reversed number, it means
  5. we've processed half of the number digits.

Solution

'''reverted number可能溢出,但是省却了判断末尾为0和0的情况'''
def isPalindrome(self, x):
    if x < 0:
        return False
    p, res = x, 0 #赋值简写
    while p:
        res = res * 0 + p % 10 #求倒叙数字的典型操作
        p //= 10 #Python3中地板除是"//",当p//10=0即p<10时退出while循环。
    return res == x
'''这里给出一个巧解,但并不符合题干不建议使用字符串的要求'''
def isPalindrome(self, x):
    return str(x) == str(x)[::-1]
/*这里给出一个官方的C#解法,通俗易懂*/
public class Solution {
    public bool IsPalindrome(int x) {
        if(x < 0 || (x % 10 == 0 && x != 0)) {
            return false;
        }
        int revertedNumber = 0;
        while(x > revertedNumber) {//关于此condition请参见Algorithm部分。
            revertedNumber = revertedNumber * 10 + x % 10;
            x /= 10;
        }

    }
    return x == revertedNumber || x == revertedNumber/10;//当x位数为奇数时,x少取了一位中间位数。
}

Python中while循环