题目
Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.
Example1:
Input:121
Output:true
Example2:
Input:-121
Output:flase
C++思路
C++知识
回文判断方法:
- 将数字逆序,并与原数字比较,查看是否一致
将数字后半部分逆转,将其与前半部分数字比较,查看是否一致。
思路1
将数字全部逆转,与原数字比较。
bool isPalindrome(int x){
if(x < 0) //所有的负数都不是回文数
return false;
long a = 0;
int b = x;
while(b!=0){
a = a * 10 + b % 10;
b /= 10;
}
if(a == x)
return true;
else
return false;
}
思路2
逆转一半的数字,那么问题来了,如何判断已经逆转到数字的一半呢?由于对于原数字是除以10,对于逆转的数字是乘以10,如果原来的数字已经小于新生成的数字,那么就表明已经到达数字的一半。此外还要分奇偶讨论,假设a是新生成的数字,b是原数字,则
- 如果是奇数,则判断a/10 == b
- 如果是偶数,直接判断 a == b
bool isPalindrome(int x){
//特殊情况
if(x < 0 || (x % 10 ==0 && x!=0)){
return 0
}
long a = 0;
int b = x;
while(a < b){
a = a * 10 + b % 10;
b /= 10;
}
return b = =a || b ==a/10;
}
python思路
思路1
转换成字符串的分片处理
def isPalindrome(self, x):
b = str(x)
converNum = b[::-1]
return converNum == b
思路2
同C++思路1
def isPalindrome(self, x):
if(x < 0):
return False
reverseNum = 0
m = x
while m > 0:
reverseNum = reverseNum * 10 + m %10
m = m//10
return reverseNum == x