欢迎来到Louis的博客

人生三从境界:昨夜西风凋碧树,独上高楼,望尽天涯路。 衣带渐宽终不悔,为伊消得人憔悴。 众里寻他千百度,蓦然回首,那人却在灯火阑珊处。
扩大
缩小

回文数


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

示例 1:

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

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

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

你能不将整数转为字符串来解决这个问题吗?


方法一:
# 字符串反转
class Solution:
    def isPalindrome(self, x):
        """
        :type x: int
        :rtype: bool
        """
        if x >= 0:  # 负数肯定不是回文数
            s_x = str(x)[::-1]  # 反转字符串
            return s_x == str(x)  # 返回对比结果
        else:
            return False


s = Solution()
print(s.isPalindrome(12323))

方法二:

# 反转整个整数
class Solution:
    def isPalindrome(self, x):
        y = x  # 备份原数字
        if x >= 0:
            half_num = 0  # 反转后的数字
            while x != 0:  # 循环取原数字中的每一位
                half_num *= 10
                half_num += x % 10  # 取x的个位数,half_num*10然后加上取到的数字
                x //= 10  # 原数字减一位
            return half_num == y  # 循环结束得到最终的反转结果进行比对
        else:
            return False

方法三:

# 反转获得一半的数字,然后跟剩下的匹配

class Solution:
    def isPalindrome(self, x):
        if x >= 0:
            half_num = 0
            while half_num < x:  # 上面那种方式是反转整个数字,其实取到了数字的一半与剩下的数字进行比对就可得到结果
                half_num *= 10
                half_num += x % 10
                if half_num == 0:  # 如果第一次half_num取到的结果是0说明原数字的个位为0,这种数字肯定不是回文数
                    return False
                x //= 10
            if half_num == x:  # 当half_num 大于或者=原数字时,结束循环,然后进行比对。 符合情况的数字123321
                return True
            else:  # 符合数字的情况  12321
                half_num //= 10
                return x == half_num
        else:
            return False


s = Solution()
print(s.isPalindrome(122100))

 

posted on 2018-09-06 12:02  Louiszj  阅读(129)  评论(0)    收藏  举报

导航