判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
实例1:
输入: 121
输出: true
实例二:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
实例三:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
// 自己的解法:将整数取余存到列表中,从列表后面往前遍历(正序);然后对整数取余(倒序),与列表中的值比较。
// 因为遍历了整个list,时间复杂度O(n),空间复杂度O(n)。
class Solution {
public boolean isPalindrome(int x) {
if(x < 0 || (x % 10 == 0 && x != 0)) {
return false;
}
int xTemp = x;
List<Integer> numList = new ArrayList();
while(x > 0) {
int temp = x % 10;
x = x / 10;
numList.add(temp);
}
for(int i = numList.size() - 1; i >= 0; i--) {
int temp = xTemp % 10;
xTemp = xTemp / 10;
if(numList.get(i) != temp) {
return false;
}
}
return true;
}
}
// 官方的解法:
// 将整数反转,当反转的数大于或等于x时,循环结束:两种情况 1.x长度为偶数 2.x长度为奇数
// 空间复杂度O(1),时间复杂度:O(logn),对于每次迭代,我们会将输入除以 10,因此时间复杂度为 O(logn)。
class Solution {
public boolean isPalindrome(int x) {
if(x < 0 || (x % 10 == 0 && x != 0)) {
return false;
}
int res = 0;
while(x > res) {
res = res * 10 + x % 10;
x /= 10;
}
return x == res || x == res / 10;
}
}