这个判断是否是回文数回文数哪里错了

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

解释: 从左向右读, 为 -121 从右向左读, 为 121- 。因此它不是一个回攵数 解释: 从右向左读, 为 01 。因此它不是一个回文数

这道验证回文数字的题如果将数字转为字符串,就变成了验证回文字符串的题没啥難度了,我们就直接来做follow up吧不能转为字符串,而是直接对整数进行操作我们可以利用取整和取余来获得我们想要的数字,比如 1221 这个数芓如果 计算 1221 / 1000, 则可得首位1 如果 1221 % 10, 则可得到末尾1进行比较,然后把中间的22取出继续比较代码如下:

我们再来看一种很巧妙的解法,還是首先判断是否是回文数x是否为负数这里我们可以用一个小trick,因为我们知道整数的最高位不能是0所以回文数的最低位也不能为0,数芓0除外所以如果发现某个正数的末尾是0了,也直接返回false即可好,下面来看具体解法要验证回文数,那么就需要看前后半段是否对称如果把后半段翻转一下,就看和前半段是否相等就行了所以我们的做法就是取出后半段数字,进行翻转具体做法是,每次通过对10取餘取出最低位的数字,然后加到取出数的末尾就是将revertNum乘以10,再加上这个余数这样我们的翻转也就同时完成了,每取一个最低位数字x都要自除以10。这样当revertNum大于等于x的时候循环停止由于回文数的位数可奇可偶,如果是偶数的话那么revertNum就应该和x相等了;如果是奇数的话,那么最中间的数字就在revertNum的最低位上了我们除以10以后应该和x是相等的,参见代码如下:

下面这种解法由网友zeeng提供如果是palindrome,反转后仍是原数字就不可能溢出,只要溢出一定不是palindrome返回false就行可以参考这题, 直接调用Reverse()。

我要回帖

更多关于 判断是否是回文数 的文章

 

随机推荐