题目
代码分析
分为两个部分进行,一个是截取正确的字符串,一个就是转换,转换的过程中,要注意边界的确定,在还剩一位的情况下,进行判断
代码实现
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次

京公网安备 11010502036488号