也没什么算法的一道题,但是需要考虑的情况很多。 大体需要忽略数字前的所有空格,需要判断正负,还有就是遇到非法字符表示数字结束。
但是最主要没考虑到的边界就是数字的大小,最初拿int做,发现测试样例大于MAX_INT。与其针对于这个边界做各种判断,最简单的办法就是使用long类型,需要考虑的边界就少很多。为了避免可能输入的数字还是大于long的范围,需要做一些限制即可。
public class Solution {
public int atoi(String str) {
boolean posi = true;
long res = 0;
if( str == null || str.equals("") )
{
return 0;
}
int i=0;
for( i=0; i<str.length();i++ )
{
if( str.charAt(i) != ' ' )
{
break;
}
}
if( str.charAt(i)=='-' )
{
posi = false;
i++;
}
else if(str.charAt(i)=='+' )
{
i++;
}
for( int j = i;j<str.length();j++ )
{
int tmp = str.charAt(j)-'0';
if( tmp >=0 && tmp <= 9 )
{
res *= 10;
if( posi == true && 2147483647-tmp < res )
{
res = 2147483647;
break;
}
else if( posi == false && 2147483647-tmp < res-1 )
{
res = -2147483648;
posi = true;
break;
}
res += tmp;
}
else
{
break;
}
}
if( posi == false )
{
res = 0-res;
}
return (int)res;
}
}