9 回文数
2019-04-06 本文已影响5人
046ef6b0df68
文|Seraph
1 问题
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
2 解题
初解:
class Solution {
public:
bool isPalindrome(int x) {
if(x<0)
return false;
vector<int> vcIDig;
int m=0;
while(x)
{
m = x%10;
vcIDig.push_back(m);
x = x/10;
}
int n = vcIDig.size();
for(int i=0; i<n/2; i++)
{
if(vcIDig[i] != vcIDig[n-i-1])
{
return false;
}
}
return true;
}
};
如上方法,我们发现,我们需要额外的空间保存数的每一位。同时,分两次检索才能得到结果。
终解:
我们可以计算出一个相反数,从而对比原值是否与相反值相等即可。
class Solution {
public:
bool isPalindrome(int x) {
bool ret = false;
long reverse = 0;
long right = x;
if (x >= 0) {
while (x > 0) {
reverse = reverse * 10 + x % 10;
x /= 10;
}
if (right == reverse) {
ret = true;
}
}
return ret;
}
};
但需要注意的一个问题是,相反数必须用大于int
最大长度的类型表示,因为某些int
值反转后会溢出。
3 积累知识点
- 注意数据类型能表示的范围,溢出会导致意想不到的错误。