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
相關文章
相關標籤/搜索