回文数

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

示例 1:
输入: 121输出: true
示例 2:
输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文数。


public bool IsPalindrome(int x) {
    //负数不可能是回文数,除了0之外,个位数带0的都不可能是回文数,反转少了一位
    if(x < 0 || (x % 10 == 0 && x != 0)) return false;

    int res = 0;
    while(res < x)
    {
        //只需要折半检查元素,回文数本身,左边就等于右边(偶数的情况,奇数的话不要中间的值)
        res = res * 10 + x % 10;
        x /= 10;
    }

    //偶数或奇数位数,奇数的话舍弃最后一位
    return x == res || x == res/10;
}


一开始我的想法就是直接反转整个整数,然后和原来的值作对比,代码一次过,结果看了下击败21%,就知道肯定有其他办法了(我这水B,都不仔细想想就做)。根据回文数的特性,只需要做一半的处理就行了,没必要反转整个数,效率直接提升了一半。


首页 我的博客
粤ICP备17103704号