zoukankan      html  css  js  c++  java
  • leetcode5之回文数

    题目描述:

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

    示例 1:

    输入: 121
    输出: true


    示例 2:

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


    示例 3:

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

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

    代码实现:

     1 def ishuiwenshu(x):
     2     '''
     3     判断一个数是否为回文数
     4     :param x:
     5     :return:
     6     '''
     7     s = str(x)
     8     left, right = 0, len(s) - 1
     9     while left < right:
    10         if s[left] == s[right]:
    11             left += 1
    12             right -= 1
    13         else:
    14             return False
    15     return True
    16 
    17 
    18 print("---------测试ishuiwenshu()-------")
    19 print(ishuiwenshu(0))
    20 
    21 
    22 def ishuiwenshu1(x):
    23     if x > 0 and x % 10 == 0:
    24         return False
    25     if x < 0:
    26         return False
    27     reverseNumber = 0
    28     while x > reverseNumber:
    29         reverseNumber = reverseNumber * 10 + x % 10
    30         x //= 10
    31 
    32     return True if x == reverseNumber or x == reverseNumber // 10 else False
    33 
    34 
    35 print("-------测试ishuiwenshu1()-------")
    36 print(ishuiwenshu1(12321))

    总结:上面提供两种方法来实现回文串的判断,方法一采用将数字转换为字符串的形式,较为简单,但会开辟额外的空间,空间复杂度高;方法2直接在数字上进行,空间复杂度小,每次只需要常数空间来存储,空间复杂度为O(1),因每次都需要除以10,时间复杂度为O(log n)。

    方法2思路:

    对特殊情况,如果为负数,不可能是回文串,如果数是正数且最后一位为0,不可能是回文串,因为数的最高位不可能是0;数只有一位时,肯定为回文串;

    当判断是否为回文串时,可以将数进行反转,如果反转数和原数相同,则说明为回文数,但此种情况存在潜在的BUG,那就是如果反转后数过大超出int.MAX,存在溢出内存的风险,因此考虑反转数的一半,若反转得到的一半数等于剩余数,则判断为回文串。现在存在一个问题。如何确定反转位数刚好为一半,当得到反转数大于等于剩余数时,说明此时完成了一半反转数。

    测试用例:当输入数位数为偶数位时,如1221,得到的反转数和剩余数相等,但如果输入数位数为奇数时,比如12321,最后得到的reverseNumber=321,x=12,中间数不用判断,因此若reverseNumber//10==x,则说明为回文数。

  • 相关阅读:
    运算符重载
    vmware 下 ubuntu 不能全屏显示 的解决方法
    最优化
    常见算法(logistic回归,随机森林,GBDT和xgboost)
    转:CRF++词性标注
    条件随机场(CRF)理论及应用
    转:RNN(Recurrent Neural Networks)
    RNN(Recurrent Neural Networks)公式推导和实现
    ML、DL相关资源
    机器学习(周志华西瓜书) 参考答案 总目录
  • 原文地址:https://www.cnblogs.com/rounie/p/13600685.html
Copyright © 2011-2022 走看看