件名の説明:
https://leetcode-cn.com/problems/ba-zi-fu-chuan-zhuan-huan-cheng-zheng-shu-lcof/
関数StrToIntを書く、この機能を実現するためには文字列を整数に変換します。あなたは、税引後営業利益又は他の同様のライブラリ関数を使用することはできません。
まず、空白文字で始まります関数は、これまでの最初の非空白文字を見つけるまで、必要であれば無用捨てます。
私たちは、整数の印として、後に連続した数字を上にして、可能な限り、最初の非空白文字が正または負の数であるシンボルのコンビネーションを見つけた場合、最初の非空白文字がある場合連続した数字が整数を形成するために結合された直後の図。
また、余分な文字を存在する可能性がある、有効な整数部分の後の文字列に加えて、これらの文字は無視することができ、彼らは機能に影響はありません。
注:最初の非空白文字の文字列が有効な整数文字列が空でない場合、または空白のみの文字列が含まれている場合、あなたは変換の機能である必要はありません。
いずれにしても、機能が効果的に変換できない場合は、0が返されます。
説明:
我々は、環境が32ビット符号付き整数のサイズは、数値範囲[-231 231--1]を格納することができると仮定する。またはINT_MIN(-231) - 値がこの範囲を超える場合、INT_MAX(1 231)を返します。
例1:
入力: "42"
出力:42
例2:
入力:「-42」
出力:-42
解説:最初の非空白文字「 - 」、それは負の符号です。
我々は、すべてのデジタル連続で負の数と、後できるだけ合わせ、最終的には-42を取得します。
例3:
入力:「4193の言葉で、」
出力:4193
説明:次の文字が数値ではないので、デジタルOFF「3」に変換。
例4:
入力:「言葉と987」
出力:0
説明:「W」最初の非空白文字が、それは正の数または負の数ではありません。
したがって、変換を効果的に行うことができません。
例5:
入力:「-91283472332」
出力:-2147483648
説明:番号「-91283472332」32ビット符号付き整数の範囲を超えます。
だから、INT_MIN(-231)を返します。
トピック分析:
境界条件は、包括的な検討する必要があると分析し、問題解決のアイデアは非常に明確ではない、しかし、対処することで、私が間違って何度もあったので、この質問を書いた理由。。。
Javaコード:
公共 INT strToInt(文字列STR){ ロング = 0結果、 IF(STR == NULL || str.isEmpty()){ リターン(INT )結果; } // 削除スペース STR = str.trim(); IF(STR !.isEmpty()||(str.startsWith( "+")|| str.startsWith( " - ")|| Character.isDigitによって(str.charAt(0 )))){ リターン(int型)結果; } ブール = str.startsWith isNeg( " - " ); // 数ではないに最初のインデックスを見つける のintをstartIndex = isNeg || str.startsWith( "+")?1:0 。 int型のインデックス= startIndexの。 一方、(指数<str.length()&& Character.isDigit(str.charAt(インデックス))){ インデックス ++ 。 } // 截取字符串 STR = str.substring(startIndexのインデックス)。 int型 powIndex = 0 ; 以下のための(int型 I = str.length() - 1; i>を= 0; i-- ){ 場合(!Character.isDigit(str.charAt(I))){ ブレーク。 } 結果+ = Math.pow(10、powIndex ++)*(str.charAt(I) - '0' )。 もし(isNeg &&(-result)<= はInteger.MIN_VALUE){ 戻りはInteger.MIN_VALUEと、 } 場合(!isNeg &&結果> = Integer.MAX_VALUEの){ 戻りInteger.MAX_VALUEのを、 } } を返す isNegを?(int型)(-result):(int型)の結果。 }
電源ボタンと時間を実行した結果を提出してください:
どのように悪いと見なさ参照してください。。。