LeetCode--Palindrome Number [Java]

本文介绍了一种不使用额外空间判断整数是否为回文的方法,通过数学运算逐位比较最高位与最低位,适用于正整数及特殊情况处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Determine whether an integet is a palindrome. Do this without extra space.

这个题目要求不使用额外空间判断一个整数是不是回文数字。

我们知道判断一个字符串是不是回文字符串,那么我们首先想到的是通过将整型数字变成字符串处理,然后依次判断首尾字符是否相同来判断是否是回文串。但是这样会带来不必要的空间开销,不满足题目要求。那么有没有好的方法呢?

首先:负数肯定不是回文数字,因为该数字前面有负号,而且仅有一个负号,所以肯定不会成为回文数字的;

其次:1位数肯定是回文数字;

再次:当数字大于1位,我们可以借鉴判断回文字符串的方式,逐渐判断首尾数字是否相同,如果首尾不同,则肯定不是回文数字;如果是,则判断第二位和倒数第二位是否相同,依次判断下去,如果都相同,则是回文数字;

最后:判断最高位和最低位是关键,最高位可以通过“除法(/)”获得,最低位可以通过“取余(%)"获得,获得最高位、最低位后,需要将数字的最高位和最低位除掉变成新的数字再次判断最高位和最低位。

Java代码如下:

<span style="color: rgb(51, 51, 51);">public boolean isPalindrome(int x) {
        if(x < 0)
        	return false;
        if(x == 0)
        	return true;
        
        int index = 1; 
        while(x/index >= 10) {
        	index *= 10;
        }
     
        while(x > 0) {
        	if(x/index != x%10)
        		return false;
        	</span><span style="color:#ff0000;"><strong>x %= index;      //减去数字的最高位    
              index /= 100;    //每次减去两位数
              x /= 10;         //减去数字的最低位 </strong></span><span style="color:#333333;">
        }
        return true;
    }</span>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值