Java求回文数的两种巧妙方法---LeetCode9 回文数

回文数:

回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

例:121 是回文数,而 123 不是。  123321 是回文数,而122223不是。

需求:给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
 


方法一:转换字符串

思路:

首先判断边界值,当x为负数的时候肯定不是回文数  例:-121 不等于 121-

当x的值为0 ~ 9 的时候肯定是回文数 例:9 等于 9 

其次把给定的整数x转换成字符串,在使用StringBuilder中的反转字符串 revers() 方法进行反转

反转之后在与把x转换的字符串进行比较。

代码:

 //方法1:利用把整数转换为字符串 在使用StringBuilder中的reverse()反转字符串方法 进行比较
    public static boolean isPalindrome1(int x) {
        if (x < 0) return false;//当x小于0的时候肯定不是回文数
        if (x >= 0 && x <= 9) return true;//当x是0 ~ 9的时候肯定是回文数
        String str = String.valueOf(x);
        return new StringBuilder(str).reverse().toString().equals(str);
    }

方法二:反转整数x的一半

思路:

首先判断边界值,当x不为0的同时为10的整数倍的时候肯定不是回文数(此时也去掉了为负数的情况)

if (x % 10 == 0 && x != 0) return false;

例:10不等于10      -1不等于1-

其次反转整数的x的一半 例:1221 只需将后两位的 21 反转为 12 在与前2位进行比较

因为两者相同,所以是回文数

当x的长度为偶数情况

 用 x (1221)% 10 = 1 得到最后一位1  用 x(1221) / 10 去掉最后一位得到122  在用 x(122) % 10 得倒数第二位2

 每得到一位都用  tmp * 10 + 得到的位  例  1 = 1 *1 0 + 1       12 =1 * 10 +2

 重点:只有当整数x大于临时变量tmp的时候循环才能继续 当x<=tmp的时候就说明已经把整数x后面一半的数字给反转了。


当x的长度为奇数情况

 思路和上面一样只是到最后的时候tmp = 12 因为此时的整数x的长度是奇数所以需要用tmp/10去掉 中间的一位2 再来比较 因为中间的那一位可以看做是一个个位数的回文数

代码:

public static boolean isPalindrome1(int x) {
  
       if (x % 10 == 0 && x != 0) return false;
       //当x为10的倍数并且不等于0同时为负数的时候不为回文数

        int tmp = 0;

        while (x > tmp) {

            tmp = tmp * 10 + x % 10;//得到x的最后一位在*10

            x = x / 10;//去掉x的最后一位
        }

        return x == tmp / 10 || x == tmp;//x的长度为奇数或者偶数的情况
}

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值