回文数

回文数

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

输入: 121
输出: true

示例 2:

输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

示例 3:

输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。

进阶:

你能不将整数转为字符串来解决这个问题吗?

bool isPalindrome(int x) {
      /*由示例2可以得出当x<0时肯定不会是回文数
      然后考虑得知当x的尾数为0时,除非x=0,不然肯定不会是回文数
      所以可以实现得出2种必然不是的情况将其排除*/
    if(x<0||(x%10==0&&x!=0)){
        return false;
    }
    
    int c =0 ;  
    while(x>c){
        
        c=c*10+x%10;
        x/=10;
    }
   return x==c||x==c/10;  
}

在这个解答方案里采用的是领扣里的官方解答方案“反转一半数字”
例:x=1221时,将其后一半的数字进行反转可得12,若与前一半数字相同即为同文数,而如何判断什么时候反转到一半就可以通过上面代码中的while循环得知。
设置循环条件为每次循环过后除10的x大于每次反转得出的数c,若数c的位数与经过数次循环后的x位数相同时,会出现3种情况。

  1. x>c
    即同位数时x>c,再进行一次循环,但这种情况可以看出必然不是回文数,所以可通过x==c||x ==c/10的条件直接得出false

  2. x=c
    即同位数时x=c,推出循环,符合x == c||x==c/10直接得出true

  3. x<c
    即同位数时x<c,该情况与1类似,可直接得出false

    x == c的判断我们都清楚,那么x==c/10的判断又是什么呢?
    当x为奇数时,在循环完后必然会出现c比x多一位的现象,但其为中位,完全不影响是否为回文数的判断,因讲起反转到c的个位,故通过/10将其丢弃在行比较。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值