题目要求
给你一个整数 x ,如果 x 是一个回文整数,返回 ture ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。
版本一:转换成字符串处理
class Solution {
public:
bool isPalindrome(int x) {
string s = std::to_string(x);
if (s == string(s.crbegin(), s.crend()))
{
return true;
}
return false;
}
};
整体思路
很简单。将传入的int整数转换成string类型,然后再判断string和自身的倒置是否相等。
版本二:非字符串版本
class Solution {
public:
bool isPalindrome(int x) {
int temp = x, invertInt = 0;
if (x < 0)
{
return false;
}
while (x != 0)
{
if(invertInt >= static_cast<int>(pow(2,31)/10) - x % 10)
return false;
invertInt = invertInt * 10 + x % 10;
x = x / 10;
}
if (temp == invertInt)
{
return true;
}
return false;
}
};
整体思路
传入一个整数,每次将该整数的最后一位提取出来,然后传入到invertInt的最后一位。传入完毕后对比前后两个数,如果相等,则是回文字数。(类似于栈的pop和push)
需要注意的是,在将整数的最后一位传给invertint的的最后一位时,有可能会出现超出int类型的限制(int表示的范围参考第8题)。所以需要加一个if判断来判断是否超界。
学到了什么
1、再次强化了int能够表达的数的范围的印象:[-pow(2,31), pow(2,31)-1]
2、超出int类型的限制这个运行时异常在VS里不会报错?