思路:主要是一个边界处理问题,找了评论区的一个源码的写法,应该还是比较好理解的。
fun myAtoi(str: String): Int {
val chars = str.toCharArray()
//各种边界处理
if (str.length < 0) return 0
var res = 0
var index = 0
//过滤空格
while (index < str.length && chars[index] == ' ') index++
if (index == str.length) return 0
//推算正负号 默认正
var positive = true
val firstChar = chars[index]
if (firstChar !in '0'..'9') {
if (firstChar != '+' && firstChar != '-') return 0
index++
positive = firstChar == '+'
}
//用负数保存正负数的边界,这样不会溢出
//正数 -2147483647
//负数 -2147483648
val limit = if (positive) {
-Int.MAX_VALUE
} else {
Int.MIN_VALUE
}
//过滤0
while (index < str.length && chars[index] == '0') index++
//取每一位,在非字符截止
while (index < str.length && chars[index] in '0'..'9') {
val digit = chars[index++] - '0'
if (res < (limit + digit) / 10) {
return if (positive) Int.MAX_VALUE else Int.MIN_VALUE
}
//res >= limit
res = res * 10 - digit
}
return if (positive) -res else res
}
和上一题其实比较相似:Leetcode 7. 整数反转
本站由以下主机服务商提供服务支持:
0条评论