LeetCode刷题DAY 1:回文数判断

1app

 题目描述ide

  • 回文数如一个整数,从左至右或从右至左读法同样,则该整数为回文数。spa

  • 题目要求给定一个数字,判断是否为回文数。code

  • 示例输入11,从左读、从右读都是11,则返回true输入123,从左读为123,从右读为321,不一致,所以返回false。orm

2ci

 解题字符串

  • 思路一转为字符串判断原字符串与反转后字符串是否一致it

回文数转换为字符串时,具备原字符串和反转后字符串相同的特色,而非回文数不具有此特色,所以能够经过这个方式判断是否为回文数。这种思路比较好理解,而且能够发现负数都不为回文数(如:-11从右读是11-),所以能够先将负数返回false,免去后面更多计算io












class Solution:    def isPalindrome(self, x: int) :        if(x<0) :            return False        return str(x)==''.join(reversed(str(x)))
#输入:15#输出:false
#输入:1331#输出:true
  • 思路二取模反转拼接class

仔细观察回文数,发现将回文数后半部分进行反转,结果跟前半部分同样(如12321,前一半是12,后一半反转后也是12,中间的3不影响整个判断),所以能够利用这个特征经过模运算和向下取整运算,将数字后半部分反转,而后与前半部分比对,获得最终结果。


class Solution:    def isPalindrome(self, x: int) :        if(x<0 or (x%10==0 and x !=0 )) :        # 相似30这种0结尾的数字都不是回文数,        # 所以首先经过与10的模运算进行排除            return False        a = len(str(x))        old = x        new = 0        for i in range(0,ceil(a/2)):            new = new*10+old%10 # %为模运算            old = old//10 # //为向下取整        return new == old or old==new//10 
#输入:15#输出:false
#输入:1331#输出:true
相关文章
相关标签/搜索