leetcode241

括弧を追加する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 ; } }

 

 

おすすめ

転載: www.cnblogs.com/liuyongyu/p/12532210.html