算法之回文数

文章介绍了如何判断一个整数是否为回文数的算法。首先排除负数和能被10整除的非零数,然后通过不断取余和除以10来反转数字的后半部分,当原始数字小于或等于反转数字时,说明已处理到一半位数。对于奇数位数的回文数,需忽略中间数字。最后给出了Java代码实现。
摘要由CSDN通过智能技术生成

首先,我们要清楚什么是回文数;

例如 12321 反转后等于原来数字的数叫回文数。

算法方面:

我们应该先处理临界情况。

(1).所有的负数不是回文数 x<0

  (2).大于0能被10整数的都不是回文数。x != 0 && x % 10 ==0

  现在,我们开始考虑如何反转后半部分的数字。

  对于数字 1221,如果执行 1221 % 10 (1221对10进行取余)我们将会得到最后一位数字1 ,要得到倒数第二位数字,我们再对122进行取余得到2。如果我们再把最后一个数字乘10,再加上倒数第二位的数字,1*10+2=12,就得到了我们想要反转的数字。如果继续这个过程,我们将会得到更多位数的反转数字。

那么,我们应该如何知道反转数字的位数已经达到原始数字位数的一半?

由于整个过程我们不断将原始数字除以10,然后给翻转数字乘上10,所以,当原始数字小于或等于反转后的数字时,就意味着我们已经处理了一半位数的数字了。

然而数字的长度有可能是奇数也有可能是偶数我们可以通过去除中间的数字(长度为奇数反转之后中间的数字不影响最回文)。

int numLength=0;

x == numLength / 10

最后上java代码

class Solution {
    public boolean isPalindrome(int x) {
        
        if(x<0 || (x %10 ==0 && x !=0)){
            return false;
        }
        int numLength = 0; 
        while(x >numLength ){
          numLength = numLength *10 +x % 10; 
          x /=10;
        }
        return x== numLength || x == numLength /10;
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值