回文数的判断


题目

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


提示:下面案例可供参考

一、方案一

public boolean palindrome(int number) {
	// 0的回文数是它本身,true
	if(number == 0) return true;
	// 负数的回文数有符号,false;个位数为0整数反过来首位为0,不是回文数
	if(number<0 || number%10==0) return false;
	int n = x; int num = 0;
	// 反转
	while (x!=0) {
		num = num*10+x%10;
		x = x/10;
	}
	return n == num;
}

提示: 此方法可能会出现数字翻转后溢出问题。因此有以下方案:

二、方案二

public boolean palindrome(int number) {
	// 0的回文数是它本身,true
	if(number == 0) return true;
	// 负数的回文数有符号,false;个位数为0整数反过来首位为0,不是回文数
	if(number<0 || number%10==0) return false;
	int num = 0;
	// 反转一半
	while (x > num) {
		num = num*10+x%10;
		x = x/10;
	}
	// x==num是偶数位数字时,num%10==x是奇数位数字时。
	return x == num || num%10 == x;
}

三、方案三

public boolean palindrome(int x) {
	// 0的回文数是它本身,true
	if(x== 0) return true;
	// 负数x的回文数有符号,false;个位数为0整数反过来首位为0,不是回文数
	if(x<0 || x%10==0) return false;
    int n = (int)Math.pow(10,(x+"").length()-1);
    while ((x+"").length()/2 > 0) {
	    if (x%10 != x/n) return false;
        x = x%n;
        if ((x+"").length()==1 || x==0) return true;
        x=x/10;
        if ((int)(x/Math.pow(10,(n+"").length() - (x+"").length()-2)) - x/Math.pow(10,(n+"").length() - (x+"").length()-2) !=0) return false;
        if (((n+"").length() - (x+"").length()) !=1) {
            x = (int) (x / Math.pow(10,(n+"").length() - (x+"").length()-2));
        }
        n = (int)Math.pow(10,(x+"").length()-1);
    }
    return true;
}

提示: 这种方法虽然也能解决问题,但是耗时较多。

四、方案四

public boolean palindrome(int x) {
	// 0的回文数是它本身,true
	if(x== 0) return true;
	// 负数x的回文数有符号,false;个位数为0整数反过来首位为0,不是回文数
	if(x<0 || x%10==0) return false;
	char[] chars = (x+"").toCharArray();
    for (int i=0;i<chars.length/2;i++) {
        if (chars[i] != chars[chars.length-1-i]) return false;
    }
   return true;
}

提示 耗时是方案三的一半,方案二的二倍多。内存消耗和方案三不相上下,大于方案二消耗。


  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值