LeetCode 9 Palindrome Number

本文讨论了整型回文数的判断方法,通过迭代处理整数转化为数组,优化了空间复杂度,提出了更优的算法实现,并对比了不同方法的效率。

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

Palindrome Number


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


有了回文字符串的基础这道题其实不难,在不借助字符串的基础上,转化为整型数组处理。

public boolean isPalindrome(int x) {
    	if(x<0)return false;
    	if(x<10&&x>-1)return true;
    	int []px = new int[10];
    	int i=0;
    	while(x>0){
    		px[i] = x%10;
    		x=x/10;
    		i++;
    	}
    	if(i%2==0){
    		int j = i/2;
    		int k = j-1;
    		while(k>=0){
    			if(px[j]!=px[k]){
    				return false;
    			}
    			k--;
    			j++;
    		}
    	}else{
    		int j=i/2-1;
    		int k=i/2+1;
    		while(k>=0){
    			if(px[j]!=px[k]){
    				return false;
    			}
    			k--;
    			j++;
    		}
    	}
        return true;
    } 

Discuss上有个巧妙的算法:

class Solution {
public:

bool isPalindrome(int x) {
    if(x<0)
        return false;

    int num=x;
    int a=0;
    while(x)
    {
        a=a*10 + x%10;
        x=x/10;
    }
    if(a==num)
        return true;
    else
        return false;

}
};


这个算法比我的更优,没有利用额外的数组空间。因为使用了px迭代之后,本身就是该数的回文序列。因此,只需要判断该数是否等于原数即可。我当时怎么没想到,这么容易。这也是之前几道题常用的迭代方法,对于数字字符串来说非常有用。关键部分代码为:

px = px*10+x%10;

x=x/10;

实在是太精妙了。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值