美文网首页
leetcode8.字符串转换整数

leetcode8.字符串转换整数

作者: Burlong | 来源:发表于2021-11-11 10:36 被阅读0次

    leetcode8 字符串转换整数

    
    /**
     * leetcode8 字符串转换整数
     *
     * 难度:medium
     *
     */
    public class MyAtoi {
    
        public static void main(String[] args) {
            MyAtoi atoi = new MyAtoi();
            int i = atoi.myAtoi(" -4193 with words");
            System.out.println(i);
        }
    
        /**
         * 一步步拆,比较清晰
         * 注意的点:每一步都维护index++
         *
         * @param str
         * @return
         */
        public int myAtoi(String str) {
            if (str.length() == 0) return 0;
            int index = 0, sign = 1;
            // 1、去除空格(第一个条件是为了避免去除空格后索引越界)
            while (index <= str.length() - 1 && str.charAt(index) == ' ') {
                index++;
            }
            // 2、同理,防止越界
            if (index > str.length() - 1) {
                return 0;
            }
            // 3、处理符号
            if (str.charAt(index) == '-' || str.charAt(index) == '+') {
                sign = str.charAt(index++) == '-' ? -1 : 1;
            }
            // 4、处理数字字符串
            int res = 0;
            while (index <= str.length() - 1) {
                // 4.1:获取、判断ascii码是否在0-9范围内
                int v = str.charAt(index++) - '0';
                if (v < 0 || v > 9) break;
                // 4.2:处理越界或即将越界
                // 1、下一次*10之前,如果比最值/10大或小,则越界,直接返回最值 2、不大/小,但相等,则比较最值个位值,大于或等于最值个位值,则(即将)越界,返回最值。
                if (res > Integer.MAX_VALUE / 10 || (res == Integer.MAX_VALUE / 10 && v >= Integer.MAX_VALUE % 10)) {
                    return Integer.MAX_VALUE;
                }
                if (res < Integer.MIN_VALUE / 10 || (res == Integer.MIN_VALUE / 10 && v >= -(Integer.MIN_VALUE % 10))) {
                    return Integer.MIN_VALUE;
                }
                // 4.3 处理进位,加上当前个位值(每次都处理符号,方便4.2的判断)
                res = res * 10 + sign * v;
            }
            return res;
        }
    
    }
    

    相关文章

      网友评论

          本文标题:leetcode8.字符串转换整数

          本文链接:https://www.haomeiwen.com/subject/kvbwzltx.html