题目
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
解法一
- 直接将数值反转
- 对比两个值是否相等
public class Solution {
public bool IsPalindrome(int x) {
if(x < 0) return false;
int t = x,c = 0;
while(t>0)
{
c = c*10 + t%10;
t /= 10;
}
return c == x;
}
}
解法二
- 基于解法一的改版
- 不用将全部位置反转,仅反转一半数值
public class Solution {
public bool IsPalindrome(int x) {
if(x < 0 || (x>0 && x%10 == 0)) return false;
int c = 0;
while(x>c)
{
c = c*10 + x%10;
x /= 10;
}
return c == x || x == c/10;
}
}
解法三
这是我的第一种写法。
- 从两端向中间,依次对比单个数值是否相等
- 拿掉相等的数值后,最后剩余长度如果不超过1,即为true
public class Solution {
public bool IsPalindrome(int x) {
if(x < 0) return false;
int t = x;
bool flag = false;
int len = 0,idx = 0;
while(t>0)
{//获取最高位
t /= 10;
len++;
}
for(;len > 0;len -= 2)
{
if(x%10 == x/((int)Math.Pow(10,len-1)))
{
x %= (int)Math.Pow(10,len - 1);
x /= 10;
}
else
{
break;
}
}
return len <= 1;
}
}
解法四
转换为字符串,通过字符串的直接对比,或通过下标索引对比
public class Solution {
public bool IsPalindrome(int x) {
string xStr = x.ToString ();
char[] xArray = xStr.ToCharArray();
Array.Reverse(xArray);
string tStr = string.Join(string.Empty,xArray);
return xStr.Equals(tStr);
}
}