括弧を追加する241さまざまな方法
パッケージleetcode。 輸入はjava.util.ArrayList; 輸入はjava.util.List; パブリック クラス Solution241は拡張ソリューションを{ @オーバーライド 公共 ボイド試験(){ // 文字列入力=「2-1-1」。 文字列の入力= "2 * 3-4-5" 。 System.out.println(diffWaysToCompute(入力))。 } 公衆リスト<整数> diffWaysToCompute(文字入力){ / * アイデア1: アイデアは、図形の両側には、i番目のシンボル計算程度で、各シンボルの位置の値の反復計算の始まりであります 代替的に得られた値とi番目の元の位置の計算、及びI-1での数及びI + 1は、このように新たに取得し、省略します 式は、その後、次の繰り返しを入力してください。 そうするなど、状況を複製するだろうが、:* 5 * 3-4 2、通常の答えは、[-34、-14、-10、-10,10]ですが、 乗算3 * 2反復において、それぞれ、2回出現 - (* 5(4)* 3(2))から2回の反復が、発生後-14 出発点及び開始点反復の5行4 *数。 したがって、この方法は現実的ではありません。 アイデアII: 各シンボルの木の根元に表現ツリー構造は、そのすべての部分式にサブツリーと右サブツリー、それぞれ、リターンを残しました 結果は、シンボルの組合せと左サブツリー右サブツリー結果に応じて、ルートノードの場合に計算することができます。 * / もし(3 <input.length()){ ArrayListの <整数> TMP = 新しい ArrayListを<> (); もし( " - " input.contains( "+")|| input.contains()|| input.contains( "*" )){ 戻りTMP。 } 他{ tmp.add(Integer.valueOf(入力))。 リターンTMP; } } リスト <整数> = NUMS 新しい新規のArrayList <> (); //格納するためのデジタル[2,3,4,5] リスト <文字> =演算子新しい新規のArrayList <> (); //演算子を格納するための[*、 - 、*] のint = 0桁、 のための(チャーC:input.toCharArray()){ IF(C> = ' 0 '&& C <=' 9 ' ){ 桁 =桁×10 +(C - '0' )。 } 他{ nums.add(桁)。 桁 = 0 ; operator.add(C); } } nums.add(桁)。 戻りヘルパー(NUMS、オペレータ、0、operator.size() - 1 )。 } プライベートリスト<整数>ヘルパー(一覧<整数> NUMS、一覧<文字>演算子、int型スタート、int型エンド){ IF(終了<= スタート){
//もし一つだけのオペレータ、演算結果に、と返す int型演算子= T(operator.get(スタート)、nums.get(スタート)、nums.get(エンド+ 1 ))。 一覧 <整数> RES = 新しい ArrayListを<> (); (T)res.add。 リターンのres; } 一覧 <整数> RES = 新しい ArrayListを<> (); 一覧 <整数>左= nullを、右= nullを。 用(intは ; I <=エンドI ++ iはSTART = {) であれば(私は== {起動) 左 = 新しい ArrayListを<> (); left.add(nums.get(スタート)); } 他{ 左(NUMS、オペレータ、開始、I-1 =ヘルパー)。 } もし(iは== {終了) 右 = 新しい ArrayListを<> (); right.add(nums.get(エンド +1 ))。 } 他{ 右 =ヘルパー(NUMS、オペレータ、I + 1 、エンド)。 } 以下のための(整数L:左){ 用:{(右整数r) res.add(オペレータ(operator.get(I)中、L、R)); } } } リターンのres; } 民間 のint演算子(チャーオペレータは、int型、int型の{B)を スイッチ(オペレータ){ ケース '+':返す +のBと、 ケース ' - ':リターン・ A - B; 場合は「*」:返す * bは、 ケース「/」:戻る / bは、 } 返す -1 ; } }