判断是否回文数(正序倒序一样的数)

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

当然负数不是(-123 --> 321-)

HighLeve:取数x的左右两端的数,如果相等把这两个数去掉,继续取两端数判断。

这里先说一下取一个数的左边几位和右边几位怎么操作(具体说应该是留下):

eg:取102的左端和右端

取左端:除(x / d)取左边i位,d就应该是10^(位数-i)。(102 / 100)-- "1";

取右边:模(x % d)取右边i位,d就应该是10*i。 (102 %10) -- "2";

如果要去掉左边(右边)i位,其实就是留下右边(左边)(位数-i)位

总结一下: 除(/)操作,会留下左边的

                       模(%)操作,会留下右边的

eg:x /10 --> 留下x十位左边的数(包括十位

        x % 10 --> 留下x十位右边的数(不包括十位

public boolean isPalindrome(int x) {
    // corner case
    if (x < 0) {
        return false;
    }
    
    // 取x左右的数
    int d = 1; // 在找左边一位之前要先确定x除几能得到个位数
    while (x / 10 >=10) {
        d = d*10;
    }
    while (x > 0) {
        int left = x / d;
        int right = x % 10;
        if (left != right) {
            return false;
        }
        // 如果相等,去掉x两端,继续进行同样判断
        x = (x % d) /10;  // x % d -- 留下d位右边,/ 10 -- 留下10位左边
                          // 这波操作完后把首位和个位去掉
        d = d / 100; // 去掉了两位数,下一轮循环的d也要降两个数量级 
    }
    return true;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值