给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。
示例 1:
输入:x = 121
输出:true
示例 2:
输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。
示例 4:
输入:x = -101
输出:false
来源:力扣(LeetCode)
这道题的输入是整数类型,首先负数肯定并非回文数,那么对于正数,我们可以使用前面说的整数反转,如果反转出来和原来的数值相等,那么就是回文数,否则不是回文数:
首先定义结果为:sum = 0
用123
作为例子,对 10
整除的结果是 12
,余数是 3
, sum = sum * 10 + 3 = 3
12
对 10
整除的结果是 1
,余数是 2
,sum = sum * 10 + 2 = 32
1
对 10
整除的结果是 0
,余数是 1
,sum = sum * 10 + 1 = 321
核心的代码无非是:
sum = sum * 10 + x % 10;
x = x / 10;
123不等于321,所以不是回文数,这道题没有坑点,java代码如下:
class Solution {
public static boolean isPalindrome(int x) {
if (x < 0) {
return false;
}
int sum = 0;
int temp = x;
while (temp != 0) {
sum = sum * 10 + temp % 10;
temp = temp / 10;
}
if (sum == x) {
return true;
} else {
return false;
}
}
}
C++ 代码如下:
#include<iostream>
#include<string>
using namespace std;
class Solution {
public:
bool isPalindrome(int x) {
if (x < 0) {
return false;
}
int sum = 0;
int temp = x;
while (temp != 0) {
sum = sum * 10 + temp % 10;
temp = temp / 10;
}
if (sum == x) {
return true;
} else {
return false;
}
}
};
int main(){
Solution solution;
cout<< solution.isPalindrome(12321)<<endl;
return 0;
}
空间复杂度为O(1),时间复杂度为O(logn)。