题目
实现一个 myAtoi(string s)
解析
该题目关键点在于
- 字符终止判断
- 溢出判断
因为难以处理开头,将整个函数分为两部分,第一部分判断什么时候数字开始,第二部分进行整数计算
开头判断原则
- 遇到空格一直跳过
- 遇到 +- 说明其后一定跟数字,游标后移后跳出
- 遇到其他的要么是字符要么数字,开始计算
第二部分计算
遇到数字就开始算,直到遇到不是数字为止。
溢出判断偷个懒,利用 64 位机可以溢出到更大范围进行判断。
最后如果是负数,就取反加一。
代码
func myAtoi(s string) int {
var i int
isPos := true
for i=0; i<len(s); i++ {
if s[i] == ' ' {
continue
}
if s[i] == '-' {
isPos = false
i++
break
}
if s[i] == '+' {
isPos = true
i++
break
}
break
}
var rst int
for ; i<len(s); i++ {
if s[i]>='0' && s[i]<='9'{
rst = rst*10 + int(s[i]-'0')
if isPos && rst > (1<<31-1) {
return 1<<31-1
}
if !isPos && rst >(1<<31) {
return -1<<31
}
}else {
break
}
}
if !isPos {
rst = ^rst+1
}
return rst
}
网友评论