判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 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,都不仔细想想就做)。根据回文数的特性,只需要做一半的处理就行了,没必要反转整个数,效率直接提升了一半。