zoukankan      html  css  js  c++  java
  • 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))
    
  • 相关阅读:
    129. Sum Root to Leaf Numbers
    113. Path Sum II
    114. Flatten Binary Tree to Linked List
    112. Path Sum
    100. Same Tree
    300. Longest Increasing Subsequence
    72. Edit Distance
    自定义js标签库
    JS 实现Table相同行的单元格自动合并示例代码
    mysql 高版本only_full_group_by 错误
  • 原文地址:https://www.cnblogs.com/davis12/p/15355856.html
Copyright © 2011-2022 走看看