🌕 8. 字符串转换整数 (atoi)

吞佛童子2022年6月20日
  • algorithm
  • String
小于 1 分钟

🌕 8. 字符串转换整数 (atoi)

难度: 🌕

问题描述

img_1.png


解法

class Solution {
    public int myAtoi(String s) {
        // 思路:
        // 根据题意要求依次计算
        char[] array = s.toCharArray();
        int flag = 1; // 正负号
        int len = array.length;
        for(int i = 0; i < len; i ++) {
            if(array[i] == ' ') {
                continue;
            } else if(array[i] == '+' || array[i] == '-') {
                if(array[i] == '-') {
                    flag = -1;
                }
                return mySol(s, len, flag, i + 1);
            } else if(isDigit(array[i]) != -1) {
                return mySol(s, len, flag, i);
            } else {
                return 0;
            }
        }
        return 0;
    }

    private int mySol(String s, int len, int flag, int left) {
        int res = 0;
        for(int i = left; i < len; i ++) {
            int cur = isDigit(s.charAt(i));
            if(cur != -1) {
                // 超范判断
                if(flag == 1) {
                    // 末尾 <= 7
                    if(res > Integer.MAX_VALUE / 10 || (res == Integer.MAX_VALUE / 10 && cur > 7)) {
                        return Integer.MAX_VALUE;
                    } 
                } else {
                    if(res > Integer.MAX_VALUE / 10 || (res == Integer.MAX_VALUE / 10 && cur > 8)) {
                        return Integer.MIN_VALUE;
                    }
                }
                res = res * 10 + cur;
            } else {
                return res * flag;
            }
        }
        return res * flag;
    }

    private int isDigit(char c) {
        int res = -1;
        if(c >= '0' && c <= '9') {
            return c - '0';
        }
        return res;
    }
}

输出

img.png

上次编辑于: 2022/6/20 下午8:24:47
贡献者: liuxianzhishou