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

在这里插入图片描述
在这里插入图片描述
题目链接:https://leetcode.cn/problems/string-to-integer-atoi/

思路

  1. 读入字符串并丢弃无用的前导空格
    隐藏条件:在读取到第一个符号位或数字位前面只能出现空格否则无法转换。
    我们取一个标识变量f记录前导空格,一直读取到第一个符号位或者是数字位,f才为1。

  2. 检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。
    我们取一个符号位变量flag,来记录最后答案的正负。

  3. 读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。
    这个很简单,因为前面我们取了一个标志位f了,当标志位f为1的情况下,读取到的不是数字,则跳出循环。

  4. 将前面步骤读入的这些数字转换为整数(即,“123” -> 123, “0032” -> 32)。如果没有读入数字,则整数为 0 。必要时更改符号(从步骤 2 开始)。
    我们可以把符号位和数字分开来,用ans来记录数字,每次读到一位数字将ans * 10,把当前读取到的数字转为int型,与ans相加(不理解的童鞋可以打一下草稿,写一下每次的过程)。

  5. 如果整数数超过 32 位有符号整数范围 [−231, 231 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −231 的整数应该被固定为 −231 ,大于 231 − 1 的整数应该被固定为 231 − 1 。

    • 符号位flag为-1的时候,判断是否ans > 231
    1. 是,则返回−231
    2. 否,则返回ans * flag
    • 符号位flag为1的时候,判断是否ans > 231 - 1
    1. 是,则返回231 - 1
    2. 否,则返回ans * flag
    • 隐藏条件: 如果在循环读取数字的时候,ans > 231就可以跳出循环了。

代码实现

func myAtoi(s string) int {
    //ans答案 flag符号位 f表示一直读到符号或者是数字才为1
    ans,flag, f := 0, 1, 0
    for i := range s{
    	//读取数字
        if s[i] >= '0' && s[i] <= '9'{
            ans = ans * 10 + int(s[i] - '0')
            f = 1
            if ans >  1<<31{
                break
            }
        }else if s[i] == '-' && f == 0{
            flag = -1
            f = 1
        }else if s[i] == '+' && f == 0{
            f = 1
        }else if f == 1 || (f == 0 && s[i] != ' '){
            break
        }
    }
    if f == 1{
        if flag == -1 && ans > 1<<31{
            return -1 * (1<<31)
        }else if flag == 1 && ans > (1<<31) - 1{
            return (1<<31) - 1
        }
        return ans * flag
    }
    return 0
}

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lin钟一

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值