給定題目

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ò)誤歡迎留言。