描述
Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数
例子
思路
- 方法1: 把数字变为字符串,然后比较–效率最低
- 方法2(比较合适):负数直接返回false,对正数取从后向前读,取一个反过来的数,然后比较
- 方法3(虽然O(logn),但是考虑到更多细节) 不用担心反过来的数字会超过int的范围:负数直接返回,对正数从后向前读,取一半,然后跟前面的一半比较
答案
- python
class Solution:
def isPalindrome(self, x: int) -> bool:
'''
方法1
s = str(x)
for i in range(int(len(s)/2)):
if s[i]!=s[len(s)-1-i]:
return False
return True
'''
'''
方法2
if x<0:
return False
xx = x
num=0
while x:
num = num*10 + x%10
x = x//10
return False if xx!=num else True
'''
#方法3
if x<0 or (x!=0 and x%10==0): #小于0的和10的倍数且不为0
return False
num=0
while x>num:
num = num*10 + x%10
x = x//10
if x==num or x==num//10 :
return True
return False
- c++
class Solution {
public:
bool isPalindrome(int x) {
/*
方法1
string s = to_string(x);
int L = s.size();
for (int i=0; i<=(L-1)/2; i++)
if (s[i] != s[L-1-i])
return false;
return true;
*/
/*
方法2
if (x<0) return false;
int xx = x;//要修改x
long num=0;//可能会超过int范围
while (x)
{
num = num*10 + x%10;
x = x/10;
}
return xx==num? true: false;
*/
//方法3
if (x<0 || (x!=0 && x%10==0)) return false;
int num = 0;
while (x>num)
{
num = num*10+x%10;
x/=10;
}
return (x==num || x==num/10)? true:false;
}
};