鹅鹅鹅算法题之-002(回文)

题目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:判断一个链表是否是回文结构。(左神将的例题:链表的考察都在考察尽量省空间的做法。)

在这里插入图片描述

方法一:申请一个栈结构,遍历的时候依次压入栈;再一次遍历链表,同步栈也同步弹出节点,每一步都比对。

方法二:申请一个栈结构,慢指针遍历压入,快指针遍历完的时,慢指针到了中间的位置,同时栈中的元素弹出 是栈中左部分的逆序;此时,链表个数为奇数,跳过中间元素,继续遍历和栈弹出的比对;偶数的话直接继续遍历和弹出的遍历。

方法三:找到链表的中间位置的节点,然后把链表右半部分做逆序;从首尾两头开始做对比。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值