原题:
Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.
Example 1:
Input: 121 Output: trueExample 2:
Input: -121 Output: false Explanation: From left to right, it reads -121. From right to left, it becomes 121-. Therefore it is not a palindrome.Example 3:
Input: 10 Output: false Explanation: Reads 01 from right to left. Therefore it is not a palindrome.
回文int判断的题,一开始用递归算速度不行,结果如下:
Success
Runtime: 36 ms, faster than 82.87% of C++ online submissions for Palindrome Number.
Memory Usage: 8 MB, less than 99.78% of C++ online submissions for Palindrome Number.
代码:
class Solution {
public:
bool isPalindrome(int x) {
if(x<0){return false;}
if(x==0){return true;}
int i=getlen(x);
bool r=isp(x,i);
return r;
}
bool isp(int x,int len){
if ((len==0||len==1)&&x>=0&&x<10){return true;}
int temp=pow(10,len-1);
int i=x/temp;
if (i==x%10){x-=i*temp+x%10;x/=10;return isp(x,len-2);}
else cout<<x;return false;
}
int getlen(int x){
int r=0;
while(x>0){
x=x/10;
r++;
}
return r;
}
};
后来决定用数组,损失一点内存空间,结果内存判定反而更好了就很迷,结果如下:
Success
Runtime: 32 ms, faster than 99.42% of C++ online submissions for Palindrome Number.
Memory Usage: 7.9 MB, less than 100.00% of C++ online submissions for Palindrome Number.
代码:
class Solution {
public:
bool isPalindrome(int x) {
if(x<0){return false;}
if(x==0){return true;}
int p[10]={0};
int len=0;
for(int i=0;i<10;i++){
p[i]=x%10;
x=x/10;
len++;
if(x==0){break;}
}
len--;
for(int i=0;i<=len;i++){
if (len<=i){break;}
if (p[i]!=p[len]){return false;}
len--;
}
return true;
}
};