给定题目
这个题目需要注意两点,一个是负数,另一个是32位数值的极限溢出。好了,开干!
平民解法和上帝解法其实思路是一样的,第一步先将有符号整数转成字符串,第二步将字符串反转,第三步反转后的字符串转成整数,第四步判断是否溢出。
平民解法:
直接贴代码吧~~~
func reverse( _x: Int) -> Int {
// 计算32位最大值和最小值 2的n次方为 1<
// 注意:有符号整数
let max = 1<<31-1
let min = -1<<31
// x 取绝对值并转成字符串
let y = abs(x)
let a ="\(y)"
var lArr = [Character]()
// 遍历字符串生成反转后的字符数组
for I in a.characters{
// 注意:反转过程中前面如果遇到0不添加到数组里
if i !="0" || lArr.count != 0{
lArr.insert( i, at: 0)
}
}
var b = ""
// 遍历字符数组组合为字符串
for I in lArr {
b.append(i)
}
var c =0
if x == 0 {
// x为0直接返回0
return 0
}else if x > 0 {
// 字符串转为有符号整数
// 注意:此处使用longLongValue或者integerValue 因为intValue会返回32位的值,c的值可能会超出32位的范围
// 这里也可以用 Int(b)! 但是不知道为什么LeetCode编译会出错
c = Int(NSString(string: b).longLongValue)
}else {
c = Int(-NSString(string: b).longLongValue)
}
// 判断并返回
if c < min || c > max {
return 0
}else{
return c
}
}
还击败了不少道友,哈哈😏
上帝解法:
直接代码~~
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)!
}
// 反转后整数溢出那么就返回 0
if result > INT32_MAX - 1 || result < -INT32_MAX-1 {
return 0
}else {
return result
}
}
好了,本次分享就到这里,有什么问题和错误欢迎留言。