基本在submit, 修改,submit,修改……
public int myAtoi(String str) {
str = str.trim();
int n = str.length();
if (n == 0) return 0;
char firstChar = str.charAt(0);
if(firstChar != '-' && firstChar != '+' && firstChar >'9' && firstChar <'0') return 0;
if((firstChar == '-' || firstChar == '+') && n==1) return 0;
int startIndex=0; int endIndex = 0;
Boolean isPositive = true;
if(firstChar == '-' ) {
startIndex=1; endIndex = 1;
isPositive = false;
}
else if(firstChar == '+') {
startIndex=1; endIndex = 1;
}
while(endIndex < n && str.charAt(endIndex) >= '0' && str.charAt(endIndex) <= '9') {
endIndex++;
}
String seqOfInteger = str.substring(startIndex, endIndex);
if(seqOfInteger.length() == 0) return 0;
double doubleNum = Double.parseDouble(seqOfInteger);
if (!isPositive && doubleNum < Math.pow(2, 31)) return -(int)doubleNum;
else if (!isPositive && doubleNum >= Math.pow(2, 31)) return 0x80000000;
else if(isPositive && doubleNum < Math.pow(2, 31)) return (int)doubleNum;
else if(isPositive && doubleNum >= Math.pow(2, 31)) return 0x7FFFFFFF;
else return 0;
}
381ms , =,=
网上看到一个C的 , 顿感自己的方法拙计…
int atoi(const char *str) {
long long cur=0;
int num=0,i=0;
int flag1=0,flag2=0;
while(str[i]!='\0' && str[i]==' ') i++;
if(str[i]=='-') flag1++,i++;
else if(str[i]=='+') flag2++,i++;
for(; str[i]!='\0'; i++)
{
if(str[i]>='0' && str[i]<='9')
{
if(flag1==2)
{
cur=cur*10-(str[i]-'0');
if(cur<-2147483648) return -2147483648;
}
else if(flag1==1) cur=-str[i]+'0',flag1++;
else
{
cur=cur*10+(str[i]-'0');
if(cur>2147483647) return 2147483647;
}
}
else break;
}
num=(int)cur;
return num;
}
逻辑思维真心有待提高 = =