题目:判断一个整数是否回文。当从左往右读和从右往左读值相等,就是回文整数。
例: Input: 121 Output: true;
Input: -121 Output: false; # -121和121-不同
Input: 10 Output: false 。
思路:最简单的方法是把整数转化为字符串str,通过str==str[::-1]来进行判断是否左右对称。但是题目下面提示是否有其他的办法来实现。如果不将整数转化字符串,很容易看出,如果整数为负数一定不是回文的。关键就是怎么通过其他方法获得非负整数的反向值。下面递归的方法非常巧妙。思想就是通过%10找到整数的最低位,并让最低位*10,再将整数/10取整再%10找到次低位,最低位*10*10,次低位*10,依次类推下去,直到找到最高位数字。
class Solution:
def isPalindrome(self, x: int) -> bool:
if x < 0:
return false
else:
return self.reverseNumber(x) == x
def reverseNumber(self, num, runningSum=0):
if num <= 9:
return runningSum + num
else:
runningSum = runningSum*10 + (num%10)*10
return self.reverseNumber(num//10, runningSum)
参考网址:https://leetcode.com/problems/palindrome-number/discuss/280596/Python-recursive-solution