加入收藏 | 设为首页 | 会员中心 | 我要投稿 济源站长网 (https://www.0391zz.cn/)- 数据工具、数据仓库、行业智能、CDN、运营!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

python怎样反转整数?思路与实现方法分享

发布时间:2022-03-29 13:58:21 所属栏目:语言 来源:互联网
导读:文本主要给大家分享使用python怎么实现整数反转,下面分享了实现思路以及几种实现整数反转的方法,感兴趣的朋友可以参考,下面我们就一起来看看python实现整数反转要怎么做吧!注意文本示例在是python3实现。 给你一个 32 位的有符号整数 x ,返回将 x 中的数
       文本主要给大家分享使用python怎么实现整数反转,下面分享了实现思路以及几种实现整数反转的方法,感兴趣的朋友可以参考,下面我们就一起来看看python实现整数反转要怎么做吧!注意文本示例在是python3实现。
 
         给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−2^31, 2^31 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。
 
         示例 1:
 
         输入:x = 123      输出:321
         示例 2:
 
         输入:x = -123     输出:-321
         示例 3:
 
         输入:x = 120       输出:21
         示例 4:
 
         输入:x = 0       输出:0
 
         思路1:将其转为字符串进行翻转,并进行正负的判断。最后,题目要求如果反转后整数超过 32 位的有符号整数的范围 [−2^31, 2^31 − 1] ,就返回 0
 
  class Solution:
    def reverse(self, x: int) -> int:
      str1 = str(x)
      
      if str1[0] == '-':
        str1 = str1[0] + str1[:0:-1]
      else:
        str1 = str1[::-1]
      return int(str1) if -2147483648<int(str1)<2147483648 else 0
         思路2:不使用字符串。当翻转后的数字大于条件就返回0
 
  class Solution:
    def reverse(self, x: int) -> int:
   y, res = abs(x), 0
      # 则其数值范围为 [−2^31, 2^31 − 1]
      boundry = (1<<31) -1 if x>0 else 1<<31
      while y != 0:
        res = res*10 +y%10
        if res > boundry :
          return 0
        y //=10
      return res if x >0 else -res
         改进:
 
  class Solution:
    def reverse(self, x: int) -> int:
      str1 = str(x)
      
      if str1[0] == '-':
        str1 = str1[0] + str1[:0:-1]
        a=int(str1)
        if (1<<31)<abs(a):
          return 0
      else:
        str1 = str1[::-1]
        a= int(str1)
        if a>(1<<31) -1:
          return 0
      return a  
         补充:问:说说Python反转三位整数有几种方法?
         答:这是leetcode上的一道编程算法题,感觉还是蛮经典的,今天就拿出来给大家分享一下!给出一个3位的正整数,你需要将这个整数中每位上的数字进行反转。例如:输入: 123,输出: 321 。大家先不看下面答案,看看如果是自己,可以想出几种Python方式来解决!
 
         下面分别来说说几种实现的方式:
 
         1、取余取整方式
 
  class Test:
    def reverseInteger(self, number):
      g = number%10     #取出个位数
      s = (int(number/10))%10  #取出十位数
      b = int(number/100) #取出百位数
      return g*100+s*10+b
  if __name__ == "__main__":
    ts = Test()
    print (ts.reverseInteger(123)) #输出结果:321
         2、使用栈的方式
 
  class Test:
    def reverseInteger(self, number):
      number = str(number) # 模拟入栈
      l = list(number)
      result = ""
      while len(l) > 0:
        result += l.pop() # 模拟出栈
      return int(result)
  if __name__ == "__main__":
    ts = Test()
    print (ts.reverseInteger(123)) # 输出结果:321
  
         3、使用切片的方式
 
  class Test:
    def reverseInteger(self, number):
      number=str(number)
      result=number[::-1] #python中切片的特殊用法
      result=(int(result))
      return result
  if __name__ == "__main__":
    ts = Test()
    print (ts.reverseInteger(123))
 
  
         4、整数转字符串,反转字符串,然后再转整数
 
  class Test:
    def reverseInteger(self, x):
      plus_minus = ""
      reverse_x = ""
      if x < 0:
        plus_minus = "-"
        x = -x
      for i in str(x):
        reverse_x = i + reverse_x
      reverse_x = plus_minus + reverse_x
      if int(reverse_x) > pow(2, 31) - 1 or int(reverse_x) < pow(-2, 31):
        return 0
      return int(reverse_x)
  
  if __name__ == "__main__":
    ts = Test()
    print (ts.reverseInteger(123)) #输出结果:321

(编辑:济源站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读