有多种解法,执行速度不同
1.最简单直接的方法:int 转 string,reverse后再比较
class Solution {
public:
bool isPalindrome(int x) {
string s=to_string(x);
string s2=s;
reverse(s.begin(),s.end());
if(s==s2)return true;
else return false;
}
};
2.不转string的方法:翻转数字后,再比较
class Solution {
public:
bool isPalindrome(int x) {
if(x < 0) return false;
long long int ans=0;int x2=x;
while(x!=0){
ans=ans*10+x%10;//ans*10,int可能越界
x/=10;
}
if(ans==x2)return true;
else return false;
}
};
3.更快的方法:转string后,一个pass,two pointer判断字符是否相同
class Solution {
public:
bool isPalindrome(int x) {
if(x < 0) return false;
string s = to_string(x);
for(int i = 0, j = s.size()-1; i<s.size(); i++, j--) {
if(s[i] != s[j]) return false;
}
return true;
}
};
但如果我把for循环的终止条件改为:i<size()/2;时间又会变长了。