题目
代码分析
分为两个部分进行,一个是截取正确的字符串,一个就是转换,转换的过程中,要注意边界的确定,在还剩一位的情况下,进行判断
代码实现
public class Solution { public static String vaildStr(String str) { StringBuilder sb=new StringBuilder(); int i=0; str=str.trim(); if(str.charAt(0)=='+'||str.charAt(0)=='-') { sb.append(str.charAt(0)); i=1; } for(;i<str.length();i++) { if(str.charAt(i)>='0'&&str.charAt(i)<='9') { sb.append(str.charAt(i)); }else { break; } } return sb.toString(); } public int atoi(String str) { if(str.length()==0) return 0; //找出连续的数字 str=vaildStr(str); if(str.length()==0) return 0; char[] chas = str.toCharArray(); boolean flag = chas[0] == '-' ? false : true; int i = (chas[0] == '+' || chas[0] == '-') ? 1 : 0; int cur = 0; for (; i < chas.length; i++) { cur = cur * 10 + (-1) * (chas[i] - '0'); if (i == chas.length - 2) { if (cur < -214748364) { //超过了范围 return flag ? Integer.MAX_VALUE : Integer.MIN_VALUE; } else if (cur == -214748364) { if (chas[i + 1] - '0' <= 7) { int temp = cur * 10 + (-1) * (chas[i + 1] - '0'); return flag ? temp * (-1) : temp; } else if (chas[i + 1] - '0' == 8) { int temp = cur * 10 + (-1) * (chas[i + 1] - '0'); return flag ? Integer.MAX_VALUE : temp; } else { return flag ? Integer.MAX_VALUE : Integer.MIN_VALUE; } } } } return flag ? cur * -1 : cur; } }
学习情况
1次