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; }

浙公网安备 33010602011771号