8.LeetCode 字符串转整数

这题感觉难度不应该是中等  因为已经被简化了 即使没被简化也就是变更校验而已

首先我们先维护四个变量 

     int pop = 0;//尾数
        boolean hasSign = false;// 是否开始转化
        int ans = 0;// 结果
        int sign = 1;//正负

然后我们再明确校验条

 

       if (!hasSign&&str.charAt(i)==' '){  //为空格不作处理
                continue;
            }
            if (!hasSign&&str.charAt(i)== '+'){// 为正做正处理
                hasSign= true;
                sign =1;
                continue;
            }
            if (!hasSign&&str.charAt(i)=='-'){// 为负做负处理
                hasSign= true;
                sign =-1;
                continue;
            }

转换数字时只要开始转换就校验是否有非数字 有就直接返回结果

 if (str.charAt(i)>='0'||str.charAt(i)=='9'){
                hasSign= true;
          // 这里是字符转数字 然后想一下如何运算 pop
= str.charAt(i) - '0'; if (ans * sign > Integer.MAX_VALUE / 10 || (ans * sign == Integer.MAX_VALUE / 10 && pop * sign > 7)) return Integer.MAX_VALUE ; if (ans * sign < Integer.MIN_VALUE / 10 || (ans * sign == Integer.MIN_VALUE / 10 && pop * sign < -8)) return Integer.MIN_VALUE;           // 简单的数字处理 ans = ans*10+pop; }else { return ans*sign; }

然后组合起来

public int myAtoi(String str) {
        int pop = 0;
        boolean hasSign = false;
        int ans = 0;
        int sign = 1;
        for (int i = 0,len = str.length(); i <len ; i++) {
            if (!hasSign&&str.charAt(i)==' '){
                continue;
            }
            if (!hasSign&&str.charAt(i)== '+'){
                hasSign= true;
                sign =1;
                continue;
            }
            if (!hasSign&&str.charAt(i)=='-'){
                hasSign= true;
                sign =-1;
                continue;
            }
            if (str.charAt(i)>='0'||str.charAt(i)=='9'){
                hasSign= true;
                pop  =  str.charAt(i) - '0';
                if (ans * sign > Integer.MAX_VALUE / 10 || (ans * sign ==
                        Integer.MAX_VALUE / 10 && pop * sign > 7))
                    return Integer.MAX_VALUE ;
                if (ans * sign < Integer.MIN_VALUE / 10 || (ans * sign ==
                        Integer.MIN_VALUE / 10 && pop * sign < -8))
                    return  Integer.MIN_VALUE;
                ans = ans*10+pop;
            }else {
                return ans*sign;
            }
        }
        return ans*sign;

    }

 

posted @ 2021-09-23 16:47  OTeam  阅读(42)  评论(0)    收藏  举报