9.回文数

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。

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

例如,121 是回文,而 123 不是。

示例 1:

输入:x = 121
输出:true
示例 2:

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

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

我上来就是一个转字符串,很快啊,面试官:你回去等通知吧,下一位。

二、数学
使用数学方法解决这个问题,也可以用反转字符串的思路,反转数字就可以了啊,比如321123,反转后是321123相等,是回文数,但是需要比较的只要一半,而且反转后可能出现整数溢出的问题,所以可以优化为反转后一半,和前一半做比较,123反转后是321,和321123前三位比较相等。
那么问题就转化为如何得到一个数字的后一半并且反转它,同时得到该数字的前一半。
首先我们处理几个边界问题,负数必然不是回文数,最后一位为0也必然不是,直接false。
众所周知,取出一个数字每一位,对10取余然后除以10就行(刚接触编程时老师就讲过的),有这个知识就很简单了,比如321123,对10取余得到3,然后除以10得到32112,假设reverse = 3,得到3,然后再对32112取余得到2,此时reverse = reverse * 10 + 2得到32,继续下去,会得到321,直到前半部分数字小于等于后半部分就结束,如何理解呢,当这个数字是偶数位时,前半和后半位数肯定相等,假如是奇数,那么取到后半多前半一位,比较的时候去掉后半部分最后一位就可以了。

Original: https://www.cnblogs.com/liangren-na/p/16437660.html
Author: 良人呐
Title: 9.回文数

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/619857/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球