我自己做出来的
class Solution {
public boolean isPalindrome(int x) {
String y = ""+x;
StringBuffer z =new StringBuffer(y);
if(z.reverse().toString().equals(y)){
return true;
}else{
return false;
}
}
}
先把这个数字转换成字符串,然后再把字符串String类转换StringBuffer类,然后StringBuffer有一个反转reverse的方法,然后反转之后还需要toString方法来转换成字符串,然后进行比较。
上网找到java中字符串反转的形式
第一种就是转换成StringBuffer这种形式然后去调用这个reverse的方法
// StringBuffer
public static String reverse1(String str) {
return new StringBuilder(str).reverse().toString();
}
第二种利用 String 的 toCharArray 方法先将字符串转化为 char 类型数组,然后将各个字符进行重新拼接:
class Solution {
public boolean isPalindrome(int x) {
String y = ""+x;
String reverse = "";
char[] chars = y.toCharArray();
for(int i =chars.length-1;i>=0;--i){
reverse +=chars[i];
}
if(y.equals(reverse)){
return true;
}else{
return false;
}
}
}
public static String reverse2(String str) {
char[] chars = str.toCharArray();
String reverse = "";
for (int i = chars.length - 1; i >= 0; i--) {
reverse += chars[i];
}
return reverse;
}
利用 String 的 CharAt 方法取出字符串中的各个字符:
public static String reverse3(String str) {
String reverse = "";
int length = str.length();
for (int i = 0; i < length; i++) {
reverse = str.charAt(i) + reverse;
}
return reverse;
}
官方解答
映入脑海的第一个想法是将数字转换为字符串,并检查字符串是否为回文。但是,这需要额外的非常量空间来创建问题描述中所不允许的字符串。
第二个想法是将数字本身反转,然后将反转后的数字与原始数字进行比较,如果它们是相同的,那么这个数字就是回文。
但是,如果反转后的数字大于 \text{int.MAX}int.MAX,我们将遇到整数溢出问题。
按照第二个想法,为了避免数字反转可能导致的溢出问题,为什么不考虑只反转 \text{int}int 数字的一半?毕竟,如果该数字是回文,其后半部分反转后应该与原始数字的前半部分相同。
例如,输入 1221,我们可以将数字 “1221” 的后半部分从 “21” 反转为 “12”,并将其与前半部分 “12” 进行比较,因为二者相同,我们得知数字 1221 是回文。
让我们看看如何将这个想法转化为一个算法。
class Solution {
public boolean isPalindrome(int x) {
if(x<0 || (x%10 == 0 && x !=0) ){
return false;
}
int reverseNumber = 0;
while(x > reverseNumber){
reverseNumber = reverseNumber*10 + x%10;
x /=10;
}
return x==reverseNumber || x ==reverseNumber/10;
}
}
第一个if语句,判断如果x小于0那么肯定不是回文数,再判断一下x如果最后一位是0,这个数但不是0那么这个数也肯定不是回文数。
定义一个reverseNumber是最后返回的数字
reverse从最后开始对x取余,然后*10,直到这个数字比x大12021
就会变成x =12 reverNumber =120