leetcode[9]-回文数

题目

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

示例

  • 输入: 121
  • 输出: true
  • 输入: -121
  • 输出: false
  • 输入: 10
  • 输出: false

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

python代码:

class Solution(object):
    def isPalindrome(self, x):
        """
        :type x: int
        :rtype: bool
        """
        if x<0:
            return False
        if x<10:
            return True
        if x%10==0:
            return False
        str_x = str(x)
        if str_x == str_x[::-1]:
            return True
        else:
            return False

这个解决方法也有技巧,最直接方法是暴力遍历法,但是不可取,因为这种有规律性的问题,一般都有更高效率的方法。

        if x<0:
            return False
        if x<10:
            return True
        if x%10==0:
            return False

按照惯例,先考虑特殊情况,首先,负数肯定不是回文数,因为它有负号,并且个位数(正数)一定是回文数,如果这个数是以0结尾的,那一定也不是回文数。

        str_x = str(x)
        if str_x == str_x[::-1]:
            return True
        else:
            return False

直接转换成字符串完成判断,很直观

延伸

不使用字符串来完成这个问题

class Solution(object):
    def isPalindrome(self, x):
        """
        :type x: int
        :rtype: bool
        """
        if x<0:
            return False
        if x<10:
            return True
        if x%10==0:
            return False
        r_x_l = []
        x_l = []
        temp_x = x
        while temp_x!=0:
            ys = temp_x%10
            temp_x = temp_x//10
            r_x_l.append(ys)
            x_l  = [ys]+x_l
        if r_x_l == x_l:
            return True
        else:
            return False

其实思路也很简单,那就是我把输入的数字想办法构造出逆序就行了,这样的话,方法就很多了,上面就是先用list逆序存储每位上的数字,再判断是否相等。

        while temp_x!=0:
            ys = temp_x%10
            temp_x = temp_x//10
            r_x_l.append(ys)
            x_l  = [ys]+x_l

对于x=123来说,r_x_l存储的是[3,2,1],x_l存储的是`[1,2,3]“,意图也很明显,用列表来代替字符串,其实本质上还是与字符串一致。

发表评论

电子邮件地址不会被公开。