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型変量値が整数に変換する結果が同じか否かを判断し、同じであればオーバーフローがない、異なる場合、オーバーフローを表し、シンボルに基づいて最大または最小の境界値を返します.
私のコードは次のとおりです.
スペース変数を使用して、先頭スペースのビット数を格納します.その後、それを捨てて文字列を再更新します.
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;
    }