LeetCode力扣Swift整數(shù)反轉(zhuǎn)平民和上帝兩種解法

給定題目


image

這個(gè)題目需要注意兩點(diǎn),一個(gè)是負(fù)數(shù),另一個(gè)是32位數(shù)值的極限溢出。好了,開干!
平民解法和上帝解法其實(shí)思路是一樣的,第一步先將有符號(hào)整數(shù)轉(zhuǎn)成字符串,第二步將字符串反轉(zhuǎn),第三步反轉(zhuǎn)后的字符串轉(zhuǎn)成整數(shù),第四步判斷是否溢出。

平民解法:

直接貼代碼吧~~~


func reverse( _x: Int) -> Int {

            // 計(jì)算32位最大值和最小值 2的n次方為 1<

            // 注意:有符號(hào)整數(shù)

            let max = 1<<31-1

            let min = -1<<31

            // x 取絕對(duì)值并轉(zhuǎn)成字符串

            let y = abs(x)

            let a ="\(y)"

            var lArr = [Character]()

            // 遍歷字符串生成反轉(zhuǎn)后的字符數(shù)組

            for I in a.characters{

                // 注意:反轉(zhuǎn)過(guò)程中前面如果遇到0不添加到數(shù)組里

                if i !="0" ||  lArr.count != 0{

                    lArr.insert( i,  at: 0)

                }

            }

            var b = ""

            // 遍歷字符數(shù)組組合為字符串

            for I in lArr  { 

                b.append(i)

            }

            var c =0

            if x == 0 { 

                // x為0直接返回0

                return 0

            }else if x  > 0 {

                // 字符串轉(zhuǎn)為有符號(hào)整數(shù)

                // 注意:此處使用longLongValue或者integerValue 因?yàn)閕ntValue會(huì)返回32位的值,c的值可能會(huì)超出32位的范圍

                // 這里也可以用  Int(b)!  但是不知道為什么LeetCode編譯會(huì)出錯(cuò)

                c = Int(NSString(string: b).longLongValue)

            }else {

                c = Int(-NSString(string: b).longLongValue)

            }

            // 判斷并返回

            if c < min || c > max  {

                return 0

            }else{

                return c

            }

        }

還擊敗了不少道友,哈哈??


image

上帝解法:

直接代碼~~


func reverses(  _x: Int) -> Int { 

            var string: String

            var result: Int

            if x >= 0 {

                // 看了上面再看這里是不是,哇!swift有直接倒序字符串的方法啊

                string = String("\(x)".reversed())

                result = Int(string)!

            }else{

                string = String("\(-x)".reversed())

                result = 0 - Int(string)!

            }

            // 反轉(zhuǎn)后整數(shù)溢出那么就返回 0

            if result  > INT32_MAX - 1 ||  result  <  -INT32_MAX-1 {

                return 0

            }else {

                return result

            }

        }

image

好了,本次分享就到這里,有什么問(wèn)題和錯(cuò)誤歡迎留言。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容