第一种:适用于对于给定的任意的int数值,有较高的效率进行回文的判断。先判断数值的位数,然后将数字按位存入数组中,再利用双指针依次判断。
public static boolean palindrome(int x){
if (x < 0 || (x % 10 == 0 && x != 0)) {
return false;
}
if(x < 10){
return true;
}
int temp = x;
int len = 0;
while (temp > 0){
len++;
temp = temp / 10;
}
int[] arr = new int[len];
int itm;
for(int i = 0; i < len; i++){
itm = x % 10;
x = x / 10;
arr[i] = itm;
}
int left = 0;
int right = len - 1;
while (left < right){
if(arr[left] != arr[right]){
return false;
}
left++;
right--;
}
return true;
}
第二种:适用于对于任意长度的数值(远远超过Integer范围),该方法也可用于判断任意字符串是否回文。该方法也是利用了双指针来进行判断。
public static boolean palindrome(String s){
if(s.isEmpty()){
return false;
}
if(s.length() == 1){
return true;
}
int left = 0;
int right = s.length() - 1;
while (left < right){
if(s.charAt(left) != s.charAt(right)){
return false;
}
left++;
right--;
}
return true;
}
我们将这两种方法拿到力扣上去测试一下
第一种方法:
第二种方法:
从整体上来讲效率还是不错。第一种方法时间复杂度O(n),空间复杂度O(n)。第二种时间复杂度O(n),空间复杂度O(1)。