六月箴言html
git
第二週算法記錄算法
007 -- Reverse Integer (整數反轉)swift
題幹英文版:this
Given a 32-bit signed integer, reverse digits of an integer.spa
Example 1:code
Input: 123
Output: 321htm
Example 2:blog
Input: -123
Output: -321ci
Example 3:
Input: 120
Output: 21
Note:
Assume we are dealing with an environment which could only store integers within the 32-bit signed integer range: [−231, 231 − 1]. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.
題幹中文版:
給出一個 32 位的有符號整數,你須要將這個整數中每位上的數字進行反轉。
注意:
假設咱們的環境只能存儲得下 32 位的有符號整數,則其數值範圍爲 [−231, 231 − 1]。請根據這個假設,若是反轉後整數溢出那麼就返回 0。
解題思路:若是不考慮數值範圍,題目很是好實現,依賴於整數除法和求餘便可實現
由於本體是要求必須是32位的有符號整數,須要判斷溢出條件:
設當前計算結果爲result,下一位爲tempInt。
一、大於最大
從result * 10 + tempInt > MAX_VALUE這個溢出條件來看
當出現 result > MAX_VALUE / 10 且 還有tempInt須要添加時,則必定溢出
當出現 result == MAX_VALUE / 10 且 tempInt > 7 時,則必定溢出,7是2^31 - 1的個位數
二、小於最小
從result * 10 + tempInt < MIN_VALUE這個溢出條件來看
當出現 result < MIN_VALUE / 10 且 還有tempInt須要添加 時,則必定溢出
當出現 result == MAX_VALUE / 10 且 tempInt < -8 時,則必定溢出,8是-2^31的個位數
具體實現爲:
func reverse(_ x: Int) -> Int { var originInt = x guard originInt != 0 else { print("originInt = 0") return 0 } var result = 0 var tempInt = 0 while (originInt != 0) { tempInt = originInt%10 originInt = originInt/10 if (result > Int32.max/10 || (result == Int32.max / 10 && tempInt > 7)) { print("最大溢出") return 0 } if (result < Int32.min/10 || (result == Int32.min / 10 && tempInt < -8) ){ print("最小溢出") return 0 } result = result*10 + tempInt } return result }
1032 / 1032 test cases passed. Status: Accepted Runtime: 4 ms Memory Usage: 20.4 MB
備註:關於時間和空間複雜度還不太會分析
往期Leetcode
有緣看到的親們:文中如有不對之處,還請勞駕之處,謝謝!