LeetCode 9.回文数(Python代码)

文章目录

  • 题目
  • Code
  • 总结


题目

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。
示例1:输入:x = 121 输出:true

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

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


来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/palindrome-number

Code

第一种方法代码如下:
class Solution:
    def isPalindrome(self, x: int) -> bool:
        if x < 0 or (x > 0 and x % 10 == 0): #负数或大于0且个位数是0的数肯定不是回文数
            return False
        num = list(str(x))
        num.reverse()
        y = ''.join(num)
        if x == int(y):
            return True
        else:
            return False

首先想到的肯定是上面这种:将数字转换成字符串,再转换成列表,反转列表。但是鉴于有些大佬说这种方法体现不出算法,所以有了下面这种反转一半数字(LeetCode官方给出的方法)。

第二种方法代码如下:

# 反转一半
# 比如12321,反转后一半为123,将12与123//10进行比较,判断是否相等,相等返回True,不等返回False
# 再如123321,反转后一半为123,剩余的123与反转后一半的123相等,所以返回True
class Solution:
    def isPalindrome(self, x: int) -> bool:
        if x < 0 or (x > 0 and x % 10 == 0): #负数或大于0且个位数是0的数肯定不是回文数
            return False
        reverted_number = 0
        while x > reverted_number:#循环截止条件x<=reverted_number
            reverted_number = reverted_number*10 + x % 10
            x = x//10
        return (x == reverted_number) or (x == reverted_number//10)#x长度为偶数or奇数

测试:

if __name__ == '__main__':
    x = 12321
    solution = Solution()
    print(solution.isPalindrome(x))

总结

题目难度:简单。提交结果显示两种方法差别不大,但是明显第二种比第一种难想。

你可能感兴趣的:(leetcode,python,算法,面试)