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