LeetCode8. 字符串转换整数 (atoi)

LeetCode8. 字符串转换整数 (atoi)

题目描述

/**
     * 请你来实现一个 myAtoi(string s) 函数,
     * 使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。
     * <p>
     * 函数 myAtoi(string s) 的算法如下:
     * <p>
     * 读入字符串并丢弃无用的前导空格
     * 检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。
     * 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。
     * 读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。
     * 字符串的其余部分将被忽略。
     * 将前面步骤读入的这些数字转换为整数(即,"123" -> 123, "0032" -> 32)。
     * 如果没有读入数字,则整数为 0 。必要时更改符号(从步骤 2 开始)。
     * 如果整数数超过 32 位有符号整数范围 [?231,  231 ? 1] ,
     * 需要截断这个整数,使其保持在这个范围内。
     * 具体来说,小于 ?231 的整数应该被固定为 ?231 ,
     * 大于 231 ? 1 的整数应该被固定为 231 ? 1 。
     * 返回整数作为最终结果。
     */

思路分析

  1. 将字符串转为整数,实则为对一个字符串的处理
  2. 因为字符串可能包含前置空格,因此先要对字符串去前置空格的操作,可以使用字符串函数trim()或者使用一个while循环搞定
  3. 然后判断字符串的符号,如果不写,默认为正号,使用一个变量记录,正号为1,负号为-1
  4. 然后扫描剩下的字符串,到所有的字符串全部扫描完或者判断扫描到的字符不是数字为止
  5. 如果上述条件都不成立,则记录扫描到的数字
  6. 扫描结束后返回
  7. 源码见下

源码及分析

public int myAtoi(String s) {
        //定义辅助变量
        int res = 0, index = 0, sign = 1, len = s.length();
        //去前置空格
        while (index < len && s.charAt(index) == ‘ ‘){
            index++;
        }
        //如果字符串全是空格,则返回零
        if (index == len){
            return 0;
        }
        //判断下一个符号是正还是负,如果不写默认为正
        if (s.charAt(index) == ‘+‘){
            index++;
        }else if (s.charAt(index) == ‘-‘){
            sign = -1;
            index++;
        }
        //记录数字
        while (index < len){
            //取出当前位的字符并转成数字
            int cur = s.charAt(index) - ‘0‘;
            //判断当前位是否为数字
            if (cur > 9 || cur < 0){
                break;
            }
            //判断是否越最大值界
            if (res > Integer.MAX_VALUE / 10 || (res == Integer.MAX_VALUE / 10 && cur > Integer.MAX_VALUE % 10)){
                return Integer.MAX_VALUE;
            }
            //判断是否越最小值界
            if (res < Integer.MIN_VALUE / 10 || (res == Integer.MIN_VALUE / 10 && cur > -1 * Integer.MIN_VALUE % 10)){
                return Integer.MIN_VALUE;
            }
            //记录结果
            res = res * 10 + cur * sign;
            //索引+1
            index++;
        }
        return res;
    }

LeetCode8. 字符串转换整数 (atoi)

上一篇:elementUI table表格表头右对齐


下一篇:ESLint 介绍