一、 题目
试确定一个整数是否为回文数。并不使用额外的空间。
提示:
负整数可能是回文数吗?(例如 -1)
如果你想要将整数转换成字符串,那么你注意到不能使用额外的空间的限制。
可能你尝试翻转整数,但是,如果你已经解决这个问题“逆向整型”,你要知道,颠倒整数可能会溢出的情况。那么你会如何处理这样的情况呢?
要有解决这个问题的一种更通用的方法。
二、 分析
了解题目的意思后,其实问题本身很简单的,一想到回文数脑海中立刻想到翻转整数、双指针等方法,但是难度在它的提示,即不能使用额外的空间和溢出的情况。原本我看是整数,就想到使用itoa(),不过此时不能使用,使用翻转整数的方法虽然提示会溢出,不过这是最初想到的方法,leetcode也过了,如下:
1、每次将flag求余10,目标整数res = res * 10 + flag % 10;
2、flag /= 10,直到为0;
3、判断目标整数和原整数是否相等。
class Solution {
public:
bool isPalindrome(int x) {
if(x < 0) return false;
int flag = x;
int res = 0;
while(flag > 0){
res = res * 10 + flag % 10;
flag /= 10;
}
if(x == res) return true;
return false;
}
};
另外一种方法是首先求出x的阶数count,比较x头尾两个对应的数字是否相等即可,如下:
1、求出x的阶数count;
2、比较x/count 和 x%10 不相等返回false;
3、x %= count,x /= 10,count /= 100,直到x = 0;
class Solution {
public:
bool isPalindrome(int x) {
if(x < 0) return false;
int a = x;
int count = 1;
while(a >= 10){
count *= 10;
a /= 10;
}
while(x > 0){
if(x/count != x%10)
return false;
x %= count;
x /= 10;
count /= 100;
}
return true;
}
};
原文地址:http://blog.csdn.net/zzucsliang/article/details/43564249