个人LeetCode刷题记录:8. 字符串转换整数 (atoi)
题目地址
java求解代码
class Solution
{
public int myAtoi(String str)
{
char[] charList = str.toCharArray(); //String转字符数组
int flag = 1; //正负号标记
int pre = 0; //当前位置指针
int tmp = 0; //更新个位值
int res = 0; //结果值
int length = str.length();
if(length == 0) return 0; //处理空字符
//跳过空格
while(charList[pre] == ' ')
{
pre++;
if(pre>=length) return 0;
}
//处理首位非空字符
switch(charList[pre])
{
case '-': flag = -1; pre++;break;
case '+': pre++; break;
case '0': pre++; break;
default: if(charList[pre] > '9' || charList[pre] < '0') return 0;
}
if(pre>=length) return 0;
//处理连续位
for(; pre < length; pre++)
{
if(charList[pre] > '9' || charList[pre] < '0') return res;
tmp = (charList[pre]-'0') * flag; //增加的个位值
//越界检测(原理见我写的第七题求解)
if(res>Integer.MAX_VALUE/10 || (res == Integer.MAX_VALUE / 10 && tmp > 7))
{
return Integer.MAX_VALUE;
}
if(res<Integer.MIN_VALUE/10 || (res == Integer.MIN_VALUE / 10 && tmp < -8))
{
return Integer.MIN_VALUE;
}
//更新res值
res = res*10 + tmp;
}
return res;
}
}
总结
前期没有好好理解题目,急于上手,写出了switch套switch这种糟糕的代码,行不通还要去搞递归什么的。
不建议一口气完成能处理所有情况的代码,其实先单独完成一个测试用例,提交之后看哪些测试用例过不了,然后根据后面的测试用例不停修改代码就能过,前10个测试用例过了后面就基本没问题了。
正好用到了第7题学到的越界检测。