python递归判断回文数_Python实现判断回文数算法

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

示例1:

输入:121

输出:True

示例2:

输入:-121

输出:False

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

示例3:

输入: 10

输出: false

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

思路:

映入脑海的第一个想法是将数字转换为字符串,并检查字符串是否为回文。但是,这需要额外的非常量空间来创建问题描述中所不允许的字符串。

第二个想法是将数字本身反转,但是这样做有一个风险,32位机器的int类型最大值为2147483647,反转后的数字可能超出范围造成溢出。

按照第二个想法,为了避免数字反转可能导致的溢出问题,为什么不考虑只反转 int\text{int}int 数字的一半?毕竟,如果该数字是回文,其后半部分反转后应该与原始数字的前半部分相同。

例如,输入 1221,我们可以将数字“1221”的后半部分从“21”反转为“12”,并将其与前半部分“12”进行比较,因为二者相同,我们得知数字 1221 是回文。

算法:

首先我们要处理一些特殊情况,负数不可能是回文数,首先要禁止负数进入。

然后再考虑如何反转数字,例如1221,首先1221%10就可以得到最后一位数字1,然后将1221/10得到122,再次122%10得到倒数第二位数字2,最后用1*10+2=12就得到了我们反转后的数字12,用12和原数字的前两位对比即可判断该数字是不是回文数。

还存在一个问题:我们怎么知道自己反转了一半呢?

我们将原始数字除以 10,然后给反转后的数字乘上 10,所以,当原始数字小于反转后的数字时,就意味着我们已经处理了一半位数的数字。

代码实现:

Python

class Solution(object):

def isPalindrome(self, x):

"""

:type x: int

:rtype: bool

"""

if x<0 or (x % 10 == 0 and x != 0):

return False

y=0

while(x>y):

y=x%10+y*10

x /= 10;

return x==y or x==y/10

Java

class Solution {

public boolean isPalindrome(int x) {

if(x < 0 || (x % 10 == 0 && x != 0))

return false;

int res = 0;

while(x > res){

res = res * 10 + x % 10;

x /= 10;

}

return x == res || x == res / 10;

}

}

相关资源:python回文判断
表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页