抬头仰望星空,是否能发现自己的渺小。

伪斜杠青年

人们总是混淆了欲望和理想

Leetcode 8. 字符串转换整数 (atoi)

8. 字符串转换整数 (atoi)

思路:主要是一个边界处理问题,找了评论区的一个源码的写法,应该还是比较好理解的。

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条评论

发表评论