Leetcode第8题:字符串转换整数 (atoi)

/**
这题就是要细心,首先要通过循环去掉前面的空格
然后看看有没有正号或者负号,或者没有符号
再看看数字有没有越界
 */
class Solution {
    public int myAtoi(String s) {
        //首先要把字符转换成数组的形式存放
        char[] chars=s.toCharArray();
        //该数组的长度
        int n=chars.length;
        //定义初始的指针
        int index=0;
        //循环去掉前面的空格
        while(index<n && chars[index] == ' '){
            index++;
        }
        //如果去完空格就到末尾了就说明这就是没有数字
        if(index==n){
            return 0;
        }
        
        //现在要判断符号
        boolean negative=false;
        //遇到负号
        if(chars[index]=='-'){
            negative=true;
            index++;
        //遇到正号
        }else if(chars[index]=='+'){
            index++;
        //遇到其他无关的符号,或者是那种前面有字母后面有数字的情况
        }else if(!Character.isDigit(chars[index])){
            return 0;
        }

        //现在看数字有没有越界
        int res=0;
        while(index<n && Character.isDigit(chars[index])){
            // 获取字符串数字的单个数字
            int digit = chars[index] - '0';
            // System.out.println(digit);
            if(res >(Integer.MAX_VALUE - digit)/10){
                // 本来应该是 ans * 10 + digit > Integer.MAX_VALUE
                // 但是 *10 和 + digit 都有可能越界,所有都移动到右边去就可以了。
                return negative ? Integer.MIN_VALUE : Integer.MAX_VALUE;
            }
            res = res * 10 + digit;
            index++;
        }
        return negative ? -res : res;
    }
}

SB工作太多,都没时间看大佬怎么写的

posted @ 2022-09-18 21:00  帕图纳克斯  阅读(20)  评论(0编辑  收藏  举报