String to Integer (atoi)
题意:把字符串转化为int。
题意说得极不清楚,” +0000003246awg2457 ”,类似这样的输入样例,竟然是合理的,应该返回3246,首先要把前面的空格都去掉,正负号去掉,把其他的非数字截掉,然后去掉多余的开头的0,判断长度是否超过10,如果长度为10,判断是否正数大于2^31-1,负数小于2^32,接下来才能正常转化。每读一个数字,将原来的数字*10再加上新数。
public class Solution144 {
public int atoi(String str) {
if (str.length()==0){
return 0;
}
boolean label=false;
while(str.length()>1&&str.charAt(0)==''){
str=str.substring(1);
}
if (str.charAt(0)=='-'){
label=true;
str=str.substring(1);
}
if (str.charAt(0)=='+'){
str=str.substring(1);
}
while(str.length()>1&&(str.charAt(0)=='0')){
str=str.substring(1);
}
for (int i=0;i<str.length();i++){
if(!(str.charAt(i)>='0'&&str.charAt(i)<='9')){
str=str.substring(0,i);
break;
}
}
if (str.length()>10){
if (!label){
returnInteger.MAX_VALUE;
}else{
returnInteger.MIN_VALUE;
}
}
if (str.length()==10){
if (!label){
if(myCompare(str,"2147483647")){
returnInteger.MAX_VALUE;
}
}else{
if(myCompare(str,"2147483648")){
returnInteger.MIN_VALUE;
}
}
}
int ans=0;
for (int i=0;i<str.length();i++){
ans=ans*10+(str.charAt(i)-'0');
}
if (label){
ans=-ans;
}
return ans;
}
privateboolean myCompare(String str, String number) {
for(int i=0;i<10;i++){
if(str.charAt(i)>number.charAt(i)){
returntrue;
}
if(str.charAt(i)<number.charAt(i)){
returnfalse;
}
}
returnfalse;
}
}