LeetCode(11) atoi

xbdyhh · · 328 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

题目:

请你来实现一个 atoi 函数,使其能将字符串转换成整数。

首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下:

如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。
假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。
该字符串在有效的整数部分之后也可能会存在多余的字符,那么这些字符可以被忽略,它们对函数不应该造成影响。
注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换,即无法进行有效转换。

在任何情况下,若函数不能进行有效的转换时,请返回 0 。

提示:

本题中的空白字符只包括空格字符 ' ' 。
假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [−231,  231 − 1]。如果数值超过这个范围,请返回  INT_MAX (231 − 1) 或 INT_MIN (−231) 。

思路:

这道题目的思路没有什么特别的地方,就是先去除首尾空格,之后对第一位进行符号检验,最后将数字转换为整型。

func myAtoi(s string) int {
    //1.如果存在去除字符串开始的空格
    s = strings.TrimSpace(s)
    sig := 1
    ans := 0
    if len(s)==0{return 0}
    //2.读取第一个字符,判断是符号还是数字
    switch  {
    case s[0]=='-':
        sig = -1
    case s[0]=='+':
        sig = 1
    case '0'<=s[0]&&s[0]<='9':
        ans = int(s[0]-'0')
    default:
        return 0
    }
    //3.读取剩余数字
    //4.读取到第一个非数字或读取完成时返回
    for i:=1;i<len(s);i++{
        if !('0'<=s[i]&&s[i]<='9'){
            break
        }
        if ans > math.MaxInt32/10 || (ans == math.MaxInt32 / 10 && sig*int(s[i]-'0') > 7) {return math.MaxInt32}
        if ans < math.MinInt32/10 || (ans == math.MinInt32 / 10 && sig*int(s[i]-'0') < -8){return math.MinInt32}
        ans = ans * 10+sig*int(s[i]-'0')
    }
    return ans
}

image.png


有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:xbdyhh

查看原文:LeetCode(11) atoi

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

328 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传