用java判断回文数的两种方法

题目在这里

方法一:每次判断数字的首跟尾是否相同

  1. 首先,负数当然不是回文数,因为最前面的负号会跑到最后面,变成一个不是数字例如231-
  2. 然后如何求得一个数的第一位呢,就比如23412这个五位数,我们只需要让这个数除以10000即可,也就是这个五位数除以一个10的四次方的数,剩下来的就是第一位,末尾只需要%10就可以求得。
  3. 求得首位跟末位之后,只需要判断是否相等即可,不相等就返回false,如果相等,那么我们要除去首位跟末尾,先除去首位,只需要减去当前这个数的首位 * 对应的10的多少次方即可,上述的23412只需要减去2 * 10000就可以了,然后这个五位数变成了3412,除去最后一位只需要/10即可。

为什么不先去尾再去首位?

因为去尾永远都是/10这个操作,而如果你后去除首位的话,那么除的数会是10000少一位,也就是说会更加繁琐,所以我们可以将去尾放在后面(不过这个好像也没有那么繁琐,主要是这种思路,如果会换一种顺序会更加简单,那么就不需要按照复杂的那种顺序来解决问题

最后一步:我们只需要将位数-2即可,23412这个数首位跟末位判断过之后,我们将数字处理位341,接下来取首位应该是除以100,很明显这个就是10的3次方,所以那个次方的数要减一个2

AC代码

class Solution {
    public boolean isPalindrome(int x) {
        if(x<0) return false;
        int y = x;
        int cnt = 0;
        while(y != 0) {
            cnt++;
            y /= 10;
        }
        cnt--;
        int n1,n2;
        while(x != 0) {
            n1 = x / (int)Math.pow(10, cnt);
            n2 = x % 10;
            if(n1 != n2) return false;
            x -= n1 * Math.pow(10, cnt);
            x /= 10;
            cnt -= 2;
        }
        return true;
    }
}

方法二:转化为字符串处理

首先负数还是判断为非回文数,转化为字符串的话只需要从中间隔开,然后从头开始依次比较前和后就可以了,偶数跟奇数都是位数/2,因为字符串从0开始,所以要减去一

class Solution {
    public boolean isPalindrome(int x) {
        if(x<0) return false;
        String str = String.valueOf(x);
        int len = str.length();
        for(int i=0;i<=(len/2-1);i++) {
            if(str.charAt(i) != str.charAt(len-i-1)) return false;
        }
        return true;
    }
}
  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值