剑指offer-把字符串转换成整数

把字符串转换成整数

将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0

解题思路

这道题的意思就是判断这个字符串表示的是不是一个整数,字符串最前面可以有正负号,后面只能是数字,不能有字母或者其他符号。另外还要考虑溢出的问题,也就是说数字必须在[-2^31,2^31-1]之间。

  • 第一步:判断第一位,不是数字的话只能是‘+’or‘-’且不能只有一位
  • 第二步:从头开始遍历字符串,第一位是符号就跳过第一位,不是数字立即返回,同时计算整数
  • 第三步:返回结果

计算的是整数的绝对值,所以若是正数必须<=2^31-1,若是负数必须<=2^31;
用一个变量limit记录这个边界,默认为2^31-1,负数的的时候要更新

function StrToInt(str)
{
    if(str.length == 0) return 0
    let res = 0,flag = 1
    let limit = 2147483647  //2^31-1
    let i=0
    //若第一位不是数字,则必须是‘+’‘—’且不能只有一位
    if(!(str[0]>'0'&&str[0]<'9')){
        if(str[0]==='-'){
            limit = 2147483648
            flag = -1
        }else if(str[0]!='+'){  //不是'-'就只能是'+'
            return 0
        }
        if(str.length == 1) return 0
        i++  //跳过符号位
    }
    
    let limitmin = limit/10  //针对res*10可能越界建立的变量
    for(;i<str.length;i++){
        if(!(str[i]>'0'&&str[i]<'9')){
            return 0
        }
        //边界处理分为两步,因为这两步都可能越界
        if(res>limitmin) return 0
        res = res*10
        if(res+(str[i]-'0')>limit) return 0  //str[i]-'0'把字符串转化为数字的方法
        res = res+(str[i]-'0')
    }
    return res*flag
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值