题目

描述

将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0

输入描述:

输入一个字符串,包括数字字母符号,可以为空

返回值描述:

如果是合法的数值表达则返回该数字,否则返回0
示例1
输入:
"+2147483647"
复制
返回值:
2147483647

解题思路 时间复杂度O(n) ,空间复杂度O(1)

  1. 字符串前面会有+-号,可以暂时不管,如果为-号最后结果乘上-1即可
  2. 接下来只要判断字符是否是数字,如果是数字就为合法字符,如果不为数字直接返回0
  3. 每次向后移动一位,那么意味着上次得到的数字需要乘以10
    public static int StrToInt(String str) {
        long result = 0;
        // 正负号标志
        Character sign = null;
        for (int i = 0 ; i < str.length() ; i++){
            char item = str.charAt(i);
            // 判断是否是数字
            if (Character.isDigit(item)){
                result += str.charAt(i) - 48;
                // 整体乘以10
                result*=10;
            }else if (item == '-' || item == '+'){
                sign = item;
            }else {
                return 0;
            }
        }
        // 如果符号位为-
        if (sign != null && sign.equals('-')){
            return (int)(result/10*-1);
        }else {
            return (int)(result/10);
        }
    }