トピック:あなたの文字盤の正方形アレイを与え、あなたは下から文字「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:公式コード
アイデア: