题目A:判断一个数是不是回文数
代码1:借助java.lang.StringBuffer类中的reverse()方法。
public Solution{
public boolean isPalindrome(int x){
String s = "";
s=s+x;
StringBuffer n = new StringBuffer(s);
n.reverse();
String t = n.toString();
if(s.equals(t)){
return true;
}
return false;
}
}
代码2:将数字转换为字符串,首尾逐步进行比较;到达中间位置退出循环。
public boolean isPalindrome(int x){
if(x<0) return false;
String s = String.valueOf(x);
for(int i=0;i<s.length()/2;i++){
if(s.charAt(i)!=s.charAt(s.length()-i-1))
return false;
}
return true;
}
代码3:把需要判断的数字拆分成两个数字比较。
public boolean isPalindrome(int x) {
if (x<0 || (x!=0 && x%10==0)) return false;
int rev = 0;
while (x>rev){
rev = rev*10 + x%10;//这里是从整个数字的个位数取值,然后依次向左移动到高位
x = x/10;//这里一直做除法运算,数字位数一直减少
}
//判断条件结束后开始判断;
//回文数长度为偶数用前者判断(123321),奇数用后者判断(12321)
return (x==rev || x==rev/10);
}
题目B:判断一个链表是否是回文结构。(左神将的例题:链表的考察都在考察尽量省空间的做法。)
方法一:申请一个栈结构,遍历的时候依次压入栈;再一次遍历链表,同步栈也同步弹出节点,每一步都比对。
方法二:申请一个栈结构,慢指针遍历压入,快指针遍历完的时,慢指针到了中间的位置,同时栈中的元素弹出 是栈中左部分的逆序;此时,链表个数为奇数,跳过中间元素,继续遍历和栈弹出的比对;偶数的话直接继续遍历和弹出的遍历。
方法三:找到链表的中间位置的节点,然后把链表右半部分做逆序;从首尾两头开始做对比。