Palindrome Number
题目描述
Determine whether an integer is a palindrome. Do this without extra space
解题思路
我们的基本思路就是, 把这个数字提取出每个位上的数字,分别压入数组中去, 然后从两端向中间看去, 判断是否是回文数字
my code
class Solution {
public:
bool isPalindrome(int x) {
if (x < 0)
return false;
if (x == 0)
return true;
bool isPalid = true;
vector<int> strx;
while (x)
{
strx.push_back(x % 10);
x = x / 10;
}
int len = strx.size();
for (int i = 0; i != len / 2 + 1; i++)
{
if (strx[i] != strx[len - 1 - i])
{
isPalid = false;
break;
}
}
return isPalid;
}
};
大神们的代码
demo 1
demo 1 主要是将数字遍历的同时, 构造反转数字, 当两个数字相近时候, 判断他们是否相等, 或是仅差一位, 思路非常 nice !!!
所有操作在一次遍历中实现了!!!
class Solution {
public:
bool isPalindrome(int x) {
if(x<0|| (x!=0 &&x%10==0)) return false;
int sum=0;
while(x>sum)
{
sum = sum*10+x%10;
x = x/10;
}
return (x==sum)||(x==sum/10);
}
};
demo2
demo2 直接将输入的 数据 进行反转, 判断反转之后的数据和原始数据之间是否相等, 从而实现, 但是这种方法, 最好需要判断时候溢出的问题
public boolean isPalindrome(int x) {
if (x < 0) return false;
int p = x;
int q = 0;
while (p >= 10){
q *=10;
q += p%10;
p /=10;
}
return q == x / 10 && p == x % 10;
}
demo 3
demo 3 采用一种方法, 直接提取某一位上的数据
(x%d)/(d/10)
一次向内进行比较, 从而实现判断
class Solution {
public:
bool isPalindrome(long long x) {
if (x < 0) return false;
long long d = 10, e = 10;
while (x / d) d *= 10;
while (d > e)
{
if ((x % d) / (d / 10) != (x % e) / (e / 10))
return false;
d /= 10;
e *= 10;
}
return true;
}
};