力扣第九题 回文数
记录总结
- 负数一定不是回文数;
- 0~9一定是回文数;
- 数学解法,同时从左右两边取数,每取一次比较一次,相同则继续,不同则直接false;
- 利用中间变量,计算数的位数count;
- %10取数,取完之后/10去掉取了的位数 (右边),左边则是原数减去所取数*所在位数
- 需要注意的点就是在通过%10,/10获取每一位上的数以及改变书的大小时,要注意0不能当作除数,要先判断/10之后是否为0。
本人解法
class Solution {
public:
bool isPalindrome(int x)
{
if(x<0)return false;
if(x==0)return true;
int count_wei = 1;
int temp_1=x,temp_2 = x;
while (temp_1 / 10 != 0)
{
count_wei++;
temp_1 /= 10;
}
int i = count_wei/2;
temp_1 = x;
int t = pow(10, count_wei-1);
while (temp_1 != 0 && temp_2!=0 && t!=0&& ((temp_1 % 10) == (temp_2 /t)) &&count_wei>i)
{
temp_1 /= 10;
temp_2=temp_2- (temp_2 / (t))* t;
count_wei--;
t = pow(10, count_wei-1);
};
if (count_wei == i)return true;
else return false;
};
};
class Solution {
public:
bool isPalindrome(int x)
{
if(x<0)return false;
if(x>=0 && 9>=x) return true;
int count_wei = 1;
int temp_1=x;
while (temp_1 / 10 != 0)
{
count_wei++;
temp_1 /= 10;
}
int i = count_wei/2;
temp_1 = x;
int t = pow(10, count_wei-1);
while (temp_1 != 0 && ((temp_1 % 10) == (temp_1 /t)))
{
temp_1=temp_1- (temp_1 / t)* t;
temp_1 /= 10;
count_wei-=2;
t = pow(10, count_wei-1);
};
if (temp_1 == 0 )return true;
else return false;
};
};
官方题解 参考
class Solution {
public:
bool isPalindrome(int x)
{
if(x<0)return false;
if(x>=0 && 9>=x) return true;
int revertNum=0,temp=x,y=0,count=1;
while(temp/=10)count++;
temp=x;
while(temp>revertNum)
{
y=temp%10;
revertNum=revertNum*10+y;
temp/=10;
}
if((count%2==0)&&temp==revertNum) return true;
else if((count%2!=0)&&(revertNum/10) == temp&&(temp!=0))return true;
else return false;
};
};