パスの最大数5137スコア

トピック:あなたの文字盤の正方形アレイを与え、あなたは下から文字「S」の右端の配列を開始します。あなたの目標は、文字「E」の配列の左上隅、数字1の残りの部分の配列、2、...、9や障害物「X」に到達することです。動きのすべてのステップでは、あなたがリーチグリッドに障害物がないことを前提に移動することができ、上に移動左アッパー、左または移動することができます。そして、すべての数字のパスに:「スコア」のパスは次のように定義されます。2つの整数を含むリストを返してください:最初の整数が最大の「スコア」であり、2番目の整数は、最大のスコアを取得するためのプログラムの数である、あなたがより多くのどれよりも取らない場合は10 ^ 9 + 7の結果を確認します。エンドへのパスは、[0、0]に戻ってください。

出典:https://leetcode-cn.com/problems/number-of-paths-with-max-score/

1幕:独自のコード

アイデア:djkljkkkkkjkjklkjdslkjlkjlk

使用時に実行します。120ミリ秒、すべてのpython3の提出にユーザーの100.00パーセントを破った
#のメモリ消費量:13.9メガバイトには、すべてのpython3の提出にユーザーの100.00パーセントを破った
からタイピングのインポートリスト
 クラスのソリューション:
     DEF pathsWithMaxScore(セルフ、ボード:リスト[STR]) - > リストの[int]:
        L = lenは(ボード)
         メモリが実際に検索され、そしてための最大、およびレコードの最大数、および各パス 
        A = [0] L * のための I における範囲(L)]
         ボードの数が正であるため、初期値は0であってもよく、パス数が上部の右下隅ので、1であり、左Xパス場合に可能である必要があります魚の数 
        [-1] [ - 1] =(0,1 トップが'0'の代わりと'E'の文字を左 
        板[0] =ボード[0 ] .replace(E 0 、1 最後の行と最後の列の最初の処理
        #1 歩くことができない場所では、パスを0に設定することにより-1ここで示されるノート
        他の場所の構造と一致し、ここでは、タプルに置き換える必要があり、これは、不必要なトラブルを避けるために、プロセスをより簡単で、有効に
        するためにレンジ(L-2、-1、-1 :)
             IFボード[1-L] [I] == ' X- ' のための J での範囲(I 、-1、-1 ):
                    [L -1] [J] =(-1 、0)
                 BREAK 
            他の右端とパスの最下行番号1と呼ばれ
                [L-1] [I] =(INT(ボード[L-1] [I])+ [L-1] [I + 1] [0]、1 のための I における範囲(L-2、 -1、-1 ):
             もしボード[I] [ - 1] == ' X ' のための J における範囲(I、-1、-1 ):
                    [J] [ -1] =(-1 、0を)
                 破る
            
                [i]が[ -1] =(int型(ボード[I]、[ - 1])+ [I + 1]、[ - 1] [0]、1 开始逐行遍历
         I 範囲(L-2、-1、-1 のために J範囲(L-2、-1、-1 :)
                 IFボード[I] [J] == ' X- ' 
                    A [I] [J] =(-1 、0)
                使用するためのメモリその注A間違って判断し、元のボードによって決定されます
                。#ボードのelif [I] == 'X-'とボード[J] == 'X-' [J + 1] [1 + I]: 
                以下の権利とする場合'X'は、それが右下の'X-'か否かが判定される
                のelif A [I] [0] == -1 [J + 1]  A [J] [0] == -1 [I + 1] 右下も'X'は、割り当てられた値が-1であれば
                    IF [I + 1] A [+ J. 1] [0] == -1 
                        A [I] [J] =(-1 、0)
                     そうでなければ右下のみ取ることができる 
                        [I] [J] = (INT(ボード[I] [J])+ [I + 1] [J + 1] [0]、[I + 1] [jで1] [1 ])
                 右が下に行くために、 'X'の場合
                のelif A [I] [J + 1] [0] == -1 
                    A [I] [J] =(int型(ボード[I] [J])+ A [I + 1] [J] [0]、A [I + 1] [J] [1 ])
                  'X'の下側の場合は、右折
                のelif A [I + 1] [J ] [0] == -1 
                    A [I] [J] =(INT(ボード[I] [J])+ A [I]、[J + 1] [0]、A [I]、[J + 1。 ] [1 ])
                か「X-」の右側と下側、
                #の等しいサイズの、番号を追加する場合の時間が、両側のサイズを決定する
                他の右側が下側よりも大きければ
                    ならA [I]、[J + 1] [0]> A [I + 1 ] [J] [0]:
                        A [I] [J] =(INT(ボード[I] [J])+ A [I] [J + 1] [0]、A [I]、[J + 1] [1 ])
                     右側が低いよりも小さい場合
                    のelif A [I]、[J + 1] [0] <A [I + 1 ] [J] [0]:
                        A [I] [J] =(INT(ボード[I] [J])+ A [I + 1] [J] [0]、A [I + 1] [J] [1。])
                     等しい場合
                    
                        A [I] [J] =(INT(ボード[I] [J])+ A [I + 1] [J] [0]、A [I]、[J + 1] [1] + [I + 1] [J] [1 ])
        場合に入れて返すために、左上より大きいかまたは0に等しい
        IF [0] [0] [0]> = 0:
             リターン [[0] [0 ] [0] [0 ] [0] [1]%(10 ** 9 + 7)]
         #は、そうでない場合)(-1,0でなければならない、どこにも記載せず、戻り[0,0] 
        リターン[0,0]
 IF  __name__ == ' __main__ ' 
    duixiang = ソリューション()
    A = duixiang.pathsWithMaxScore( =ボード【' EX '' XS ' ])
     印刷(A)
コードの表示

アクトII:公式コード

アイデア:

おすすめ

転載: www.cnblogs.com/xxswkl/p/12115061.html