leetcode-08字符串转整数java实现
不使用trim()
class Solution {
public int myAtoi(String str) {
char c;
boolean sgin=false;
boolean over=false;
boolean hasSgin=false;
int hasSpace= -1;
//String newStr=str.trim();
int res=0;
long longRes = 0l;
for (int i=0; i<str.length();i++ ){
c= str.charAt(i);
if(c ==' ' && i-hasSpace==1){
hasSpace= i;
continue;
}
if( ( c=='-' || c=='+') && hasSgin && i==2 ){
return 0;
}
if( ( c=='-' || c=='+') && hasSgin && i!=2 ){
break;
}
if(c=='-'){
sgin = true;
hasSgin= !hasSgin;
continue;
}
if(c=='+'){
hasSgin= !hasSgin;
continue;
}
if(c=='.'){
break;
}
int asccode =(int) c -48;
if(asccode >-1 && asccode < 10){
hasSgin= !hasSgin;
longRes = longRes *10 +asccode;
}else if(i==0){
return 0;
}else {
break;
}
if(longRes>Integer.MAX_VALUE){
longRes = Integer.MAX_VALUE;
over = ! over;
break;
}
}
res = (int) longRes;
if(sgin){
res = ~ res;
}
if(sgin && !over){
res = res + 1;
}
return res;
}
}
使用trim()
class Solution {
public int myAtoi(String str) {
int c;
boolean isSideSgin=false;
boolean isOver=false;
boolean hasSgin=false;
boolean isSgin=false;
String newStr=str.trim();
int res=0;
long longRes = 0l;
for (int i=0; i<newStr.length();i++ ){
c= (int) newStr.charAt(i);
isSgin = ( c==45 || c==43);
if( isSgin && hasSgin && i==2 ){
return 0;
}
if( isSgin && hasSgin && i!=2 ){
break;
}
if(c==45){
isSideSgin = true;
hasSgin= !hasSgin;
continue;
}
if(c==43){
hasSgin= !hasSgin;
continue;
}
if(c==46){
break;
}
int asccode =c - 48;
if(asccode >-1 && asccode < 10){
hasSgin= !hasSgin;
longRes = longRes *10 +asccode;
}else if(i==0){
return 0;
}else {
break;
}
if(longRes>Integer.MAX_VALUE){
longRes = Integer.MAX_VALUE;
isOver = ! isOver;
break;
}
}
res = (int) longRes;
if(isSideSgin){
res = ~ res;
}
if(isSideSgin && !isOver){
res = res + 1;
}
return res;
}
}
进阶版