写了好久才发现思路错了,不应该用字符串处理的。
一下代码没有通过测试,一会儿再修改,先去上课。
public class Solution {
public int myAtoi(String str) {
int outPut=0,i=0;
if(str==null||str.length()==0)return 0;
str=str.trim();
StringBuffer s = new StringBuffer(str);
s=s.insert(s.length(),"*"); //an end sign
while((s.charAt(i)>='0'&&s.charAt(i)<='9')||s.charAt(i)=='-'||s.charAt(i)=='+'){
i++;
}
if(i>1&&(s.charAt(i-1)=='-'||s.charAt(i-1)=='+'))i--;
try{
outPut=Integer.parseInt(s.substring(0,i).trim());
}catch(NumberFormatException exception){
System.out.println("please enter number.");
}
return outPut;
}
}
整个算法都用字符串处理的话算法就太傻了,我早该意识到问题,写了快3小时。。。
Update:
换了个思路,一会儿就撸出了新的算法,如下:
public class Solution {
public int myAtoi(String str) {
int outPut=0,i=0;
double bigNum=0.0;
boolean negative=false;
if(str==null||str.length()==0)return 0;
str=str.trim();
if(str.charAt(0)=='-'){
negative=true;
i++;
}
if(str.charAt(0)=='+')i++;
while(str.charAt(i)>='0'&&str.charAt(i)<='9'){
int n = Character.getNumericValue(str.charAt(i));
bigNum=10*bigNum+n;
i++;
if(i>str.length()-1)break;
}
if(negative)bigNum=0-bigNum;
if(bigNum>Integer.MAX_VALUE)return Integer.MAX_VALUE;
if(bigNum<Integer.MIN_VALUE)return Integer.MIN_VALUE;
return (int)bigNum;
}
}
代码速度还是比较慢,没办法,用了double型计算。
看了别人的代码,确实我的还有待完善,下次再更新。
Fight On!