给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。
算法一:将整数反转之后,判断反转后的数据是否和原数据相等
/*
* 判断是不是回文数,只需要将数值反转过来看是否和原数据相等即可
*/
public boolean isPalindrome(int value) {
if(value < 0) {
return false;
}else {
int temp = value;
int reverse = 0;
while(temp!=0) {
reverse = reverse*10 + temp%10;
temp = temp/10;
}
if(value == reverse) {
return true;
}
}
return false;
}
算法二:先转成字符串,然后用两个游标,一个从左到右,一个从右到左进行遍历
public boolean isPalindromenew(int value) {
if(value < 0) {
return false;
}else if(value <10){
return true;
}else {
String str = String.valueOf(value);
char[] array = str.toCharArray();
int length = array.length;
for(int i=0;i<length/2;i++) {
char left = array[i];
char right = array[length-1-i];
if(left != right) {
return false;
}
}
return true;
}
}
第一种算法的时间复杂度都是O(lgn),第二种算法复杂度是O(n)。因为算法一不管是否是回文数都需要返回一个完整的数据,算法二是左右两边只要有一个元素不满足条件,就返回false,所以理想情况复杂度是O(1)。