LeetCode Reverse Integer

六月箴言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

 Two Sum 

 

 有緣看到的親們:文中如有不對之處,還請勞駕之處,謝謝!

相關文章
相關標籤/搜索