Leetcode第八题 字符串转数字 String to Integer (atoi)

269 阅读1分钟

题目描述:给定一个字符串,要求把这个字符串里,前N位是数字的字符转换成int类型并返回(第N+1位就不是数字)。

有一下几个边界条件。

1 字符串前面如果存在空字符,直接跳过,往下处理。

2 第一个字符如果是+号和-号,可以表示正负数,需要特殊处理下。

3 从第一个字符开始读取,如果当前字符是数字,继续判断下一个字符,如果当前字符不是数字,那么字符串剩下的部分跳过。

4 把是数字部分的子串转成int类型。

5 注意int类型是有取值范围的[-2^31次方, 2^31 - 1]。

那么我们按照这些条件,处理字符串就可以了。

解法:

class Solution {
    public int myAtoi(String s) {
        //去掉字符前后空格
        s=s.trim();
        if(s.length()==0){
            return 0;
        }
        int result=0;
        int k=0;
        boolean flag=true;
        //判断下当前字符串的第一位是否需要特殊处理
        if(s.charAt(0)=='-' || s.charAt(0)=='+'){
            k=1;
            flag = s.charAt(0)!='-';
        }
        int length=0;
        //遍历字符串
        for(int i=k;i<s.length();i++){
            //如果当前字符不是数字,结束循环
            if(!Character.isDigit(s.charAt(i))){
                break;
            }
            //如果当前字符是数字,长度加1
            length++;
        }
        if(length == 0) return result;
        try{
            //截取字符串,转成int类型
            result=Integer.parseInt(s.substring(0,length+k));
            return result;
        }catch(NumberFormatException e){
            //如果转换异常 说明超出int值得边界 处理下返回值
            return flag ? Integer.MAX_VALUE:Integer.MIN_VALUE;
        }
        
    }
}

运行结果: Runtime: 2 ms, faster than 82.30% of Java online submissions for String to Integer (atoi).

Memory Usage: 42.1 MB, less than 15.04% of Java online submissions for String to Integer (atoi).