【面试题】把字符串转成整数

题目描述

在这里插入图片描述
题目要求结果要在 int型的数值范围内,注意数字越界处理。

class Solution {
    public int strToInt(String str) {
        if(str.length() == 0) return 0;
        int sign = 1;
        int res = 0;
        int boundary = Integer.MAX_VALUE / 10; // res不能超过 int32的数值范围
        int num_start = 0;
        while(str.charAt(num_start) == ' ') { // 删除首部的空格
            num_start++;
            if(num_start == str.length()) return 0;
        }
        // 判断符号位
        if(str.charAt(num_start) == '+') { // 符号位为‘+’
            sign = 1;
            num_start++;
        }
        else if(str.charAt(num_start) == '-') { // 符号位为‘-’
            sign = -1;
            num_start++;
        }
        // 遍历剩余字符
        for(int i=num_start; i<str.length(); i++) {
            if(str.charAt(i) - '0' >= 0 && str.charAt(i) - '0' <= 9) { // 若为数字字符,判断当前拼接结果是否越界
                if(res > boundary || res == boundary && str.charAt(i) - '0' > 7)
                    return sign==1 ? Integer.MAX_VALUE : Integer.MIN_VALUE; // 如果已越界,则根据符号位直接返回 INT_MAX (231 − 1) 或 INT_MIN (−231)。
                res = res*10 + (str.charAt(i) - '0'); // 不越界则继续拼接数字
            }
            else break; // 一旦遇到有效的整数字符之外的其它字符,不需要继续转换了,直接返回
        }
        return sign*res; // 返回结果:符号位*拼接整数
    }
}

参考

题解1
题解2

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值