leetcode——8. String to Integer (atoi) (java)
この問題は文字列を整数に変換することです.この問題は難しくないが,主にいくつかの特殊な条件と境界判定に注意しなければならない.
1、変換整数オーバーフローの場合、出力最大(2^32-1)または最小値(-2^32)
2、先頭文字が正負または数字でない場合、出力1
3、先頭は連続して文字にすることはできません.例えば「+-2」という出力は0です
4、先頭に連続するスペースがあり、文字列変換はスペース以外の最初の文字から始まります.「-42」出力-42のように
まず、このintオーバーフロー問題は、第7題と同様に、結果が得られるたびにオーバーフローしたか否かを判定し、ステップ毎に得られた結果をlong型で記憶することで、整数範囲を超えたばかりのときにlong型の範囲を超えないことを保証し、その後、そのlong型変量値が整数に変換する結果が同じか否かを判断し、同じであればオーバーフローがない、異なる場合、オーバーフローを表し、シンボルに基づいて最大または最小の境界値を返します.
私のコードは次のとおりです.
スペース変数を使用して、先頭スペースのビット数を格納します.その後、それを捨てて文字列を再更新します.
1、変換整数オーバーフローの場合、出力最大(2^32-1)または最小値(-2^32)
2、先頭文字が正負または数字でない場合、出力1
3、先頭は連続して文字にすることはできません.例えば「+-2」という出力は0です
4、先頭に連続するスペースがあり、文字列変換はスペース以外の最初の文字から始まります.「-42」出力-42のように
まず、このintオーバーフロー問題は、第7題と同様に、結果が得られるたびにオーバーフローしたか否かを判定し、ステップ毎に得られた結果をlong型で記憶することで、整数範囲を超えたばかりのときにlong型の範囲を超えないことを保証し、その後、そのlong型変量値が整数に変換する結果が同じか否かを判断し、同じであればオーバーフローがない、異なる場合、オーバーフローを表し、シンボルに基づいて最大または最小の境界値を返します.
私のコードは次のとおりです.
スペース変数を使用して、先頭スペースのビット数を格納します.その後、それを捨てて文字列を再更新します.
public int myAtoi(String str) {
Long result =(long) 0;
int notation = 1; //
int length = str.length();
int space = 0;
while(space57||str.charAt(0)<48)){
return 0;
}
if(str.charAt(0)==45){
notation = -1;
}else if(str.charAt(0)==43){
notation = 1;
}else{
result = (long)result *10 + ((long) str.charAt(0) - 48);
}
for(int i=1;i47&&c<58){
result = (long)result *10 + ((long) c - 48);
if(result!=result.intValue()){
if(notation == 1){
return Integer.MAX_VALUE;
}else{
return Integer.MIN_VALUE;
}
}
}else{
break;
}
}
return result.intValue() * notation;
}