判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
这一题比较像题7可以用整数翻转法,全部反转过来如果和原数一样那么就是一个回文数。
public bool IsPalindrome(int x) { if (x < 0) return false; else { int rev = 0; int x1 = x; while (x1 != 0) { int pop = x1 % 10; x1 = x1 / 10; rev = rev * 10 + pop; } return x == rev; } }
实际上如果是一个回文数, 只需要反转后一半,与前一半相等就可以, 例如“1221” 反转后一半21变成12 , 与前一半相等即可
问题是如何只反转一半
只要让原数字小于反转数字即可
public bool IsPalindrome(int x) { if (x < 0||(x%10 ==0&&x!=0)) return false; else { int rev = 0; while (x > rev) //原数字小于反转后的数字 { rev = rev * 10 + x % 10; x /= 10; } return (x == rev) || (x == rev / 10); //反转后的数字可能包含处于中位的数字 } }