思路
最开始想通过去用空格分离就直接隔离到第二个字符串
然后写下来这个代码
但是这个代码的问题就是,如果前面没有空格呢,或者如果压根就不存在array[1]呢
好的我的想法失败了
class Solution {
public int myAtoi(String s) {
String[] array=s.split(' ');
String[] arr=array[1].toCharArray();
if(arr[0]='-'||arr[0]='+'||(arr[0]<'9'||arr[0]>'0'))
{
new StringBuild result=new StringBuild();
for(int i=1;i<s.length;i++)
{
if(arr[i]<'9'||arr[i]>'0')
result.append(arr[i]);
else
break;
}
String str=result.toString();
int number=Integer.praseInt(str);
return number;
}
else
return 0;
}
}
第二遍
其实还是得老老实实的按照流程走一遍,排除一些奇葩个例
减少使用库函数,因为这些库函数可能导致一些新的问题产生
class Solution {
public int myAtoi(String s) {
int len=s.length();
int index=0,sign=1;
int res=0;
char[] arr=s.toCharArray();
while(arr[index]==' ')
{
index++;
}
if(len==index)
{
return 0;
}
if((arr[index]<'0'||arr[index]>'9')&&(arr[index]!='-'||arr[index]!='+'))
return 0;
if(arr[index]=='-')
{
sign=-1;
index++;
}
if(arr[index]=='+')
{
sign=1;
index++;
}
if((arr[index]<'9'||arr[index]>'0'))
{
for(index=index;index<len;index++)
{
char currChar = arr[index];
if(arr[index]<'9'||arr[index]>'0')
{
if (res > Integer.MAX_VALUE / 10 || (res == Integer.MAX_VALUE / 10 && (currChar - '0') > Integer.MAX_VALUE % 10))
{
return Integer.MAX_VALUE;
}
if (res < Integer.MIN_VALUE / 10 || (res == Integer.MIN_VALUE / 10 && (currChar - '0') > -(Integer.MIN_VALUE % 10)))
{
return Integer.MIN_VALUE;
}
res=res*10+(currChar-'0')*sign;
}
else
break;
}
}
return res;
}
}
又错了
不知道原因
二哥代码思路和我第一遍一样的但是他通过了
学习一下
虽然效率不高,因为用库函数用多了是这样的
提取数字的字符函数
Character.isDigit()
又用了try catch,估计在那里又用不了