1. 程式人生 > 其它 >LeetCode 騰訊精選練習50——007 整數反轉

LeetCode 騰訊精選練習50——007 整數反轉

技術標籤:LeetCode 騰訊精選練習50leetcodepython演算法

LeetCode 007 整數反轉


Author: Labyrinthine Leo   Init_time: 2021.01.14


Index Words: LeetCode 007


公眾號:Leo的部落格城堡


題目

  • 整數反轉
  • 題號:007
  • 難度:簡單
  • https://leetcode-cn.com/problems/reverse-integer/

給出一個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。

示例 1:

輸入: 123
輸出: 321

示例 2:

輸入: -123
輸出: -321

示例 3

:

輸入: 120
輸出: 21

示例 4:

輸入: 1534236469
輸出: 0

示例 5:

輸入: -2147483648
輸出: 0

注意:

假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為[−2^31, 2^31 − 1]。請根據這個假設,如果反轉後整數溢位那麼就返回 0。

Python實現

1、逆序取值法

思路:簡單題,簡單講一下方法。首先考慮特殊情況,提取係數,按照整數轉換,轉換方法:迴圈提取尾數並乘10,直到最後一位累加即可。例如:x = -123,取係數k = -1,轉正x = 123 -> 取餘x % 3 -> y = 3*10 = 30,取x = 12

-> 取y = (30+2)*10 = 320 -> y = 320+1 -> y = k * y = -321

  • 狀態:通過
  • 執行用時: 36 ms, 在所有 python3 提交中擊敗了 90.03% 的使用者
  • 記憶體消耗: 14.7 MB, 在所有 python3 提交中擊敗了 26.38% 的使用者
# coding  : utf-8
# fun     : Leetcode 007 整數反轉
# @Author : Labyrinthine Leo
# @Time   : 2021.01.14

class Solution:
	def reverse(self, x: int) ->
int: k = -1 if x < 0 else 1 # 係數 x = -x if x < 0 else x # 取正 y = 0 # 初始值 while x >= 10: y = (y + x%10) * 10 # 取尾部餘數求值 x = x // 10 y = k * (y + x) if y < -(2**31) or y > (2**31 - 1): # 特判 return 0 else: return y # 測試用例 x = 1534236469 s = Solution() print(s.reverse(x))