为了账号安全,请及时绑定邮箱和手机立即绑定

ACM之判断回文数

标签:
Java

题目如下


这道题比较简单,先上Python代码感受一下,就一行搞定:

#判断回文数def isPalindrom(x):    return  str(x) == str(x)[::-1]

这种方法虽然简单,但是耗时比较长。再用Java解决一下看看

方法一

显然负数不可能是回文数,区间[0,9]的整数肯定是回文数,所以把这些确定的条件先进行判断

将整数的每一位放在链表中,然后将链表逆序,比较逆序链表与顺序链表元素是否一样,一样则是回文数,否则不是

代码如下:

public class PalindromNumber {    public boolean isPalindrom(int x){        if(x < 0) return false;        List<Integer> num = new ArrayList();        while(x != 0){            num.add(x % 10);            x = x / 10;        }        int len = num.size();        List<Integer> numRev = new ArrayList();        for(int i = len-1;i >= 0;i--){            numRev.add(num.get(i));        }        for(int i = 0;i < len ;i++) {            if(num.get(i) != numRev.get(i)){                return false;            }                        }             return true;    }

方法二

    将上述代码优化,发现其实我们只需要比较一般就行了,也就是将数从左往右读的前一半与从右往左读的后一半比较就ok,比如一个数12133121,前一半为1213,后一半是1213,显然数回文数。当一个数不能平均分为两半时,将较大的数(即前一半)整除10得到的数再与小数比较就行,因为前一半各位的数字也可以作为后一半的最高位,是公用的,去掉不会有影响。如121343121,前一半为121234,后一半为1213,12134/10=1213与后一半相同,故判断为回文数

代码:

public class PalindromNumberBter {    public boolean isPalindrom(int x){        if(x < 0 || (x > 0 && x % 10 == 0)) return false;        int half = 0;        while(x > half) {            half = half*10 + x%10;            x = x/10;        }        return (x == half  || x == half/10);    }

可以直观的对比他们所需的时间,用时最少的是方法二







点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消