测试用例很多格式,一开始做了一遍遇到“ +0 123” (开始的想法是去掉字符串中的所有空格导致0后面的空格读不到了)之后重写了一下,普通且强硬的解法,作为记录,将代码留在这里。
思路: String.trim()去掉收尾空格,判断一个字符是不是 ‘-’ 号或者 数字 或者 '+' 号 不是就 return 0
从去掉收尾空格的字符串的下标为1的位置开始找数字 是数字就StringBuilder的append()方法。
最后检测一下append()完成之后字符串的长度,是0直接return 0
是1判断一下添加的是不是数字(有可能只添加了 ‘-’ 号 (用例 : ‘-+1’ 一开始就没过))是数字直接Integer.parseInt 不是就仍然return 0
最后借助BigDecimal完成判断是否大于 Integer.MAX_VALUE 和 Integer.MIN_VALUE
思路是 建两个 BigDecimal 对象,用compareTo方法看返回的值是不是1(具体就不介绍了,我是查到就用的)
测了下时间 10次平均47ms
代码如下
import java.math.BigDecimal;
class Solution {
public static int myAtoi(String str) {
if(str.length() == 0)
return 0;
if(str.length() == 1)
{
if(str.charAt(0) >= '0' && str.charAt(0) <= '9')
return Integer.parseInt(str);
else
return 0;
}
StringBuilder sb = new StringBuilder();
str = str.trim();
if(str.length() == 0)
return 0;
if(str.charAt(0) == '-' || (str.charAt(0) >= '0' && str.charAt(0) <= '9') || str.charAt(0) == '+')
{
if(str.charAt(0) == '-' || (str.charAt(0) >= '0' && str.charAt(0) <= '9') )
sb.append(str.charAt(0));
}
else
return 0;
for(int i = 1; i < str.length(); i++)
{
if( (str.charAt(i) >= '0' && str.charAt(i) <= '9'))
sb.append(str.charAt(i));
else
break;
}
String fs = sb.toString();
if(fs.length() == 0)
return 0;
if(fs.length() == 1)
{
if(fs.charAt(0) >= '0' && fs.charAt(0) <= '9')
return Integer.parseInt(fs);
else
return 0;
}
if((fs.charAt(0) >= '0' && fs.charAt(0) <= '9'))
{
BigDecimal bd = new BigDecimal(fs);
BigDecimal bd2 = new BigDecimal(Integer.MAX_VALUE);
int a = bd.compareTo(bd2);
if(a == 1)
return Integer.MAX_VALUE;
else
return Integer.parseInt(fs);
}
if(fs.charAt(0) == '-')
{
BigDecimal bd = new BigDecimal(fs);
BigDecimal bd2 = new BigDecimal(Integer.MIN_VALUE);
int a = bd.compareTo(bd2);
if(a == 1)
return Integer.parseInt(fs);
else
return Integer.MIN_VALUE;
}
return 0;
}
}
菜鸟一个,希望与大家共同进步和学习。