LeetCode——Reverse Integer

LeetCode之Reverse Integer

  • 问题描述
    Given a 32-bit signed integer, reverse digits of an integer.
  • 示例git

    Input: 123
     Output: 321
     Input: -123
     Output: -321
     Input: 120
     Output: 21
  • 注意
    Assume we are dealing with an environment which could only store integers within the 32-bit signed integer range: [−2^31, 2^31 − 1]. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.
    假设咱们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2^31, 2^31 − 1]。请根据这个假设,若是反转后整数溢出那么就返回 0
  • 解决:app

    1. 将int转为str,若是小于0,从字符串索引1开始存入列表中,大于0,从索引0开始存入列表,若是能被10整除,从列表倒数第二个元素开始,每一个元素转为int,再与对应的10的幂相乘,累加。这段代码比较low,代码量较大,没有用到Python语言的特色。this

      class Solution:
          def reverse(self, x: int) -> int:
              str_x = str(x)
              list_x = []
              if x < 0:
                  for i in range(1, len(str_x)):
                      list_x.append(str_x[i])
              else:
                  for i in range(len(str_x)):
                      list_x.append(str_x[i])
              number = 0
              if x%10 == 0:
                  for j in range(len(list_x)-2, -1, -1):
                      number += int(list_x[j]) * (10 ** j)
              else:
                  for j in range(len(list_x)-1, -1, -1):
                      number += int(list_x[j]) * (10 ** j)
                      # print(number)
              if x < 0:
                  number = number - 2*number
              if number >= 2 ** 31 or number < (-2 ** 31):
                  number = 0
              return number
    2. 与上面的思路一致,不过利用了Python的一些操做spa

      class Solution:
      def reverse(self, x):
          """
          :type x: int
          :rtype: int
          """
          if x==0:
              return 0
          str_x = str(x)
          x = ''
          if str_x[0] == '-':
              x += '-'
          x += str_x[len(str_x)-1::-1].lstrip("0").rstrip("-")
          # Python3 整型是没有限制大小的,能够看成 Long 类型使用,因此能够直接强制转化,其余语言两个数相加会溢出,变成负数
          x = int(x)
          if -2**31 < x < 2**31-1:
              return x
          return 0
    3. 官方解法。循环,对给定的int数先对10取余,再除以10,直到除以10为0为止。反转后的数开始为0,每次乘10再加上每次取余后的结果,最终就是反转的结果。可是乘10加上取余结果可能会形成溢出问题。进行判断:图片描述code

      class Solution:
      def reverse(self, x: int) -> int:
          rev = 0
          flag = 1
          if x < 0:
              x = abs(x)
              flag = -1
          while x != 0:
              pop = x % 10
              x = x // 10
              if (rev > (2**31-1) // 10) or (rev == (2**31-1) // 10 and pop > 7):
                  return 0
              if (rev < (-2**31) // 10) or (rev == (-2**31) // 10 and pop < -8):
                  return 0
              rev = rev * 10 + pop
          return rev * flag
    • 注:Python中负数取余索引

      -123%10 = -123 - 10 * (-123 // 10) = -123 - 10 * (-13) = 7
相关文章
相关标签/搜索