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: true
Example 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.
题目解析:
题目说输入一个数字,判断这个数字是不是回文数字,及正过来和倒过来是一样的。正:123,回文321就返还false。正-123321,回文:123321-,负号在后边因此也返还false。
所以第一步要把数字分开,如果是负数,直接返还false,如果是0(因为有可能输入-0这种情况),直接返还true,如果是正数就进入接下来的判断。
正数首先使用C++ 11中的to_string函数,把int转换成string型,之后定义两个指针,一个放在头一个放在尾,开始向中间遍历,只需要遍历到中间的位置就可以。如果都相同,就返还true,有不同就返还false。时间复杂度O(n),空间复杂度O(1)。
#include<vector>
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
class Solution {
public:
bool isPalindrome(int x)
{
if (x < 0)
return false;
else if (x == 0)
return true;
else
{
string str = to_string(x);
int p1 = 0;
int p2 = str.length() - 1;
while (p1 <= p2)
{
if (str[p1] != str[p2])
return false;
else
{
p1++;
p2--;
}
}
return true;
}
}
};
int main()
{
int n;
cin >> n;
Solution so;
bool zla = so.isPalindrome(n);
cout << zla << endl;
system("pause");
return 0;
}