您的位置:首页 > 其它

Leetcode 07 Reverse Integer(数字反转) && 09 Palindrome number(回文判断)

2018-03-08 11:02 597 查看

07 数字反转

该题难度不大,主要对输入数字进行取余数并将取出的余数保存一个新的数字之中,然后对原数进行除10操作直到输入数字为0时,唯一需要注意的是,定义新数字是将其类型定义为long,否则当数字本省大于INT_MAX或者INT_MIN的时候会出现越界的情况,然后变成一个随机区域内数字,就无法达到返回0的目的。程序如下:
class Solution {
public:
int reverse(int x) {
long result=0;
while(x!=0){
result=result*10+x%10;
x /= 10;
}

return (result > INT_MAX || result < INT_MIN)? 0 : result;

}
};


09 回文判断题目相对于之前的题目来说相当的简洁和08题很像,而我解题之所以跳过08题的原因有如下两点:一、08题的情况有点多需要再琢磨琢磨,相对08虽然是一个中等难度的题目,但情况过多也造成了它的难度提升。二、09题和07题有异曲同工之妙,两者解法相似。为什么说两个解法相似,就需要理解何为回文,所谓回文就是反转数字以后其结果和输入相同,所以其解题大体和07题相同,在对其加上一个判断语句即可,但有些小的细节需要注意,看下列程序:
class Solution {
public:
bool isPalindrome(int x) {
if(x>=INT_MAX||x<=INT_MIN)  //判断是否超过范围
return false;
int answer=0,tmp=x;
while(x!=0){
answer=answer*10+x%10;  //与07题相同的计算语句
x/=10;
}
if(answer==tmp)
return true;
else
return false;
}
};
看似没有问题的程序但在某些情况下无法通过测试,主要是因为当输入小于0的时候,该数不可能是一个回文。所以在对x范围进行判断的时候加上x>0条件即可。
if(x>=INT_MAX||x<=INT_MIN)
return false;
//改为
if(x<0||x>=INT_MAX||x<=INT_MIN)
return false;
这样就能通过所有测试成功AC。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: