美文网首页
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