判断一个数是否是回文数

        题目:给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
                   回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。

        示例:给定x = 121 ,返回 true。 给定 x = -121 返回 false。

        思路:反转整数。将整数的后半部分反转,如果反转后的结果跟前半部分相同,则说明是回文数。

        例: 12321,我们如何拿到最后一位数字呢? 使用取余算法, 12321 % 10 = 1,于是我们拿到了最后一位数字后,接着拿倒数第二位数字,倒数第二位数字应该是由 1232 % 10 得来的,那么1232是怎么来的,是根据12321 / 10 计算出来的。我们此时再通过计算,将后半段的每一位数字进行反转,得到出一个大的结果。但是我们怎么确保后半段的范围在哪?我们观察一下,当我们将后半段的数字进行反转后,如果前半段的数字小于等于后半段的数字,那么就说明,我们将后半段的数字已经全部反转了。 例 当我们拿到 3时,我们后半段数字的反转结果应该为: 123,此时 前半段数字 12 小于后半段数字123,就说明,后半段数字已经被我们反转完了。

        代码实现

public static boolean isPalindrome(int x){
	// 负数永远不是回文数。如果一个大于0的整数最后一位为0,那么这个数组也不是回文数
	if(x<0 || (x %10 ==0 && x!=0)){
		return false;
	}
	
	int tag = 0;
	while(x > tag){
		// x % 10 拿到个位数字。 tag * 10 是用于 反转数字。
		tag = x % 10 + tag * 10;
		x = x / 10; 
	}
	
	// x == tag % 10,是为了了防止出现我们上例中存在的123这种情况
	//例:12321, tag = 123 , x = 12 ,我们通过 tag /10 去除原数字中出现的中位数的情况。
	return x == tag || x == tag / 10
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值