美文网首页
8. String to ingeger (atoi) 字符串转

8. String to ingeger (atoi) 字符串转

作者: sarto | 来源:发表于2022-03-11 15:16 被阅读0次

题目

实现一个 myAtoi(string s)

解析

该题目关键点在于

  1. 字符终止判断
  2. 溢出判断

因为难以处理开头,将整个函数分为两部分,第一部分判断什么时候数字开始,第二部分进行整数计算
开头判断原则

  1. 遇到空格一直跳过
  2. 遇到 +- 说明其后一定跟数字,游标后移后跳出
  3. 遇到其他的要么是字符要么数字,开始计算

第二部分计算
遇到数字就开始算,直到遇到不是数字为止。
溢出判断偷个懒,利用 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
}

相关文章

网友评论

      本文标题:8. String to ingeger (atoi) 字符串转

      本文链接:https://www.haomeiwen.com/subject/kpocdrtx.html