1 クラスソリューション: 2 find2Smallest DEF(自己、ARR): 3 N = LEN(ARR) 4 minsum1、minsum2 = sys.maxsize、sys.maxsize 5 minindex1、minindex2 = - 1、 - 1 6 ための J でレンジ(N) : 7 場合 ARR [J] <= minsum1およびARR [J] <= minsum2: 8 minsum2 = minsum1 9 minindex2 = minindex1 10 minsum1 = ARR [S] 11 minindex1 =J 12 のelif ARR [J]> = minsum1およびARR [J] <= minsum2: 13 minsum2 = ARR [J] 14 minindex2 = J 15 16 リターン[minsum1、minindex1]、[minsum2、minindex2]] 17 18 DEF minFallingPathSum (自己、ARR:' リスト[リストの[int] ') - > INT : 19 N = LEN(ARR) 20 なら == nは1 : 21 戻り ARR [ 0 ] [ 0 ] 22 23 のためにI 中の範囲(1 、N): 24 DP = self.find2Smallest(ARR [I- 1 ]) 25 のための J でレンジ(N): 26 であれば J == DP [ 0 ] [ 1 ]: 27 ARR [I] [J] + = DP [ 1 ] [ 0 ] 28 他: 29 ARR [I] [J] + = DP [ 0 ] [ 0 ] 30 リターン分(ARR [ - 1 ])
この質問はleetcode 931直接各行の計算と上記の線の各々が、同じ列にないとTLEれる場合、アップグレードされたバージョン。従って、2つの数値にのみ、最小のラインを保持します。
現在の行の計算では、現在のセルの場合にのみ、同じ列内の前の行のカラムの最小値は、同じカラムであれば、最後から二番目に小さい値に決定されます。それ以外の場合は、最小線を使用します。
以下のスキームは、TLEは、比較として使用することができます:
1つの インポートSYS 2 クラス:ソリューション 3 minFallingPathSum DEF(自己、ARR:' リスト[リストの[int] ') - > INT : 4 N = LEN(ARR) 5 であれば N == 1 : 6 戻り ARR [ 0 ] [ 0 ] 7 DP = [sys.maxsize ため _ 中範囲(N)] のための _ 中範囲(N)] 8 DP [ 0 ] = ARR [ 0 ] 9 minsum = sys.maxsize 10 のための I における範囲(1 、N): 11 用の J で:レンジ(N) 12 のための K における範囲(N): 13 なら J =!K: 14 DP [I] [J] =分(DP [I]、[J]、DP [I- 1 ] [K] + ARR [I] [J]) 15 もし I N == - 1 : 16 minsum = 分(minsum、DP [I] [J 】) 17 リターン minsum