leetCode8 字符串转换整数 (atoi)

在这里插入图片描述

 public static int myAtoi(String s) {
        s = s.trim();
        if (s == null) {
            return 0;
        }
        if (s.isEmpty()){
            return 0;
        }
        char charStr = s.charAt(0);
        int count = 0;
        int sign = 1;
        if (charStr == '+'){
            count ++;
        }else if (charStr == '-'){
            sign = -1;
            count ++;
        }else if (!Character.isDigit(charStr)){
            return 0;
        }
        long num = 0;
        long res = num * sign ;
        while (count < s.length() && Character.isDigit(s.charAt(count))){

            num = num * 10 + Integer.parseInt(String.valueOf(s.charAt(count)));
            res = num * sign;

            if (res > Integer.MAX_VALUE){
                return Integer.MAX_VALUE;
            }
            if (res < Integer.MIN_VALUE){
                return Integer.MIN_VALUE;
            }
            count++;
        }
        return (int) num * sign;
    }

代码解释:

1. 首先,对输入的字符串进行修整,去除首尾的空格。如果修整后的字符串为null,返回02. 如果修整后的字符串为空,也返回03. 获取修整后字符串的第一个字符。 
4. 初始化计数器count为0,符号sign为15. 如果第一个字符是'+',则计数器count加16. 如果第一个字符是'-',则将符号sign设为-1,计数器count加17. 如果第一个字符不是数字,则返回08. 初始化变量num和res为0,res存储最终结果。 
9. 当计数器count小于字符串长度且当前字符是数字时,进入循环。 
10. 将num乘以10并加上当前字符对应的数字,更新num的值。 
11. 将res设置为num乘以符号sign。 
12. 如果res大于整型的最大值(Integer.MAX_VALUE),返回Integer.MAX_VALUE13. 如果res小于整型的最小值(Integer.MIN_VALUE),返回Integer.MIN_VALUE14. 计数器count加115. 循环结束后,返回res的整型值乘以符号sign。 
 
这段代码的作用是将字符串转换为整数,并且处理了一些异常情况,例如字符串为空、不包含数字等。

2、long num = 0;
long res = num * sign ; 为什么使用long 而不是int
问题解释:

在这段代码中,使用 long 类型是为了防止整数溢出的情况发生。 
 
在字符串转换为整数的过程中,可能会出现结果超过 int 类型的取值范围的情况。为了确保结果的准确性,可以使用 long 类型来存储中间结果和最终结果。通过使用 long 类型,可以处理更大范围的整数值,避免溢出。 
 
在代码的最后,将 long 类型的结果强制转换为 int 类型返回,因为方法的返回类型是 int 。 
 
总之,使用 long 类型是为了增加代码的健壮性和准确性,以处理可能出现的整数溢出情况。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值