• 009-leetcode算法实现之回文数-palindrome-number -python&golang实现


    给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。

    回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。

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

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

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

    输入:x = -101
    输出:false

    本题通过两种方法实现算法:
    1.基于数学取模,参考整数反转leetcode007,得到反转后的数字后,保证边界情况下进一步看值是否相等,时间O(n),空间O(1)
    2.基于字符串字符双指针比较,时间O(n),空间O(1)

    时间效率一样,空间效率数学取模法更优。

    python

    # 基于数学取模比较值,参考整数反转
    def is_palindrome_number(num: int) -> bool:
        """
    
        :param num: int32 >0
        :return: bool
        """
        INT_MAX = pow(2, 31) - 1
        numOrigin = num
    
        if num < 0 or num > INT_MAX:
            return False
    
        if num >= 0 and num < 10:
            return True
    
        temp = 0
        while num > 0:
            temp = temp *10 + num %10
            num = num // 10
    
        res = True if temp < INT_MAX and temp == numOrigin else False
    
        return res
    
    # 基于字符串双指针比较方法
    def is_palindrome_number1(num: int) -> bool:
        """
    
        :param num: int32 >0
        :return: bool
        """
        INT_MAX = pow(2, 31) -1
    
        if num < 0 or num > INT_MAX:
            return False
        if num >= 0 and num < 10:
            return True
    
        numStr = str(num)
        length = len(numStr)
        flag = True
        for i in range(length >> 1):
            if numStr[i] == numStr[length-i-1]:
                continue
            else:
                flag = False
                break
    
        return flag
    
    
    if __name__ == "__main__":
        num1 = 123
        num2 = 1221
        num3 = 0
        num4 = -1221
        num5 = 2100000008
        num6 = 3000000003
        print(is_palindrome_number1(num1))
        print(is_palindrome_number1(num2))
        print(is_palindrome_number1(num3))
        print(is_palindrome_number1(num4))
        print(is_palindrome_number1(num5))
        print(is_palindrome_number1(num6))
    
  • 相关阅读:
    shell脚本空行造成“: not found.sh“报错
    MySQL实现分组排序(8.0版本以下ROW_NUMBER() OVER())
    vscode远程主机
    nginx-ingress-controler改写上下文
    nginx-ingress-controller自定义参数
    kubernetes安装nginx-ingress-controller服务
    二进制kubernetes升级
    C++关键字完整版
    virtio、vhost和 vhost-user
    Tomcat端口占用报错时的排除办法
  • 原文地址:https://www.cnblogs.com/davis12/p/15355856.html
Copyright © 2020-2023  润新知