20200331
Plan
leetcode 每日一题
Notes
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 1: 输入: 121 输出: true
示例 2: 输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3: 输入: 10 输出: false 解释: 从右向左读, 为 01 。因此它不是一个回文数。
进阶: 你能不将整数转为字符串来解决这个问题吗?
这道题比较直观的想法就是转换成字符串,之所以把这道题记录下来,就是想记录一下如何不转换成字符串来解决这个问题。
解法: 首先根据示例,所以负数都不是回文。其次,主要的思路就是,对一个数n,比如是12321,n%10可以得到最后一个数字,那么每次将之前的数字10并加上原数字除以10后%10,就可以组成一个逆序的数x。比如说:12321%10=1 110+1232%10=12 1210+123%10=123 12310+12%10=1232 1232*10+1%10=12321 如果最后的数字与原数字相同,那么就是回文。 为了提高算法的效率,可以在获取到一半的时候就比较是否相同。那么如何判断到了一半呢?只需要判断如果当前的数n<=当前值x,那么就到了一半了。 但是注意: 需要比较x与n和x/10与n是否相同,如果n的个数是偶数,比如123321,那么会出现n=123,x=123的情况。如果n的个数是奇数,比如12321,那么在n=123,x=12后就会变成n=12,x=123。所以此时判断x/10是否与n是否相同,相同则证明原始的n也是回文。