1つの インポートSYS 2 クラスのソリューション: 3 DEF __init __(自己): 4 self.sums = sys.maxsize 5 6は、 デフ(自己、労働者、I、バイク、使用、合計)をバックトラック: 7 場合、私は== lenの(労働者) 8 self.sums = 分(self.sums、合計) 9 リターン 10 11 なら和> self.sums: 12 リターン 13 14 のための J における範囲(LEN(バイク)): 15 場合に使用される[J]: 16 続行 17 中古[J] = Trueを 18 self.backtrack(労働者、I + 1、バイク、使用、和+ self.getDist(研究者[I]、自転車[J])) 19 中古[J] = Falseを 20 21 DEF getDist(自己、労働者、自転車): 22の リターン ABS(労働者[ 0 ] -bike [ 0 ])+ ABS(作業員[ 1 ] [-bike 1 ]) 23 24 デフassignBikes(自己、労働者:' 一覧[一覧[INT]] '、バイク:' 一覧[一覧[INT]] ' ) - > int型: 25 V = [FALSE] * LEN(バイク) 26 self.backtrack(労働者、0、バイク、V、0 ) 27 リターン self.sums
上記のコードは、バックトラックを使用しますが、TLE。効率を高めるために、動的プログラミングを使用する必要性を考慮して、まだ通常はしないでください。
本当にleetcodeプラットフォームは、「言語キル」で同じJava言語を用いて溶液を見てのアイデアが、ACことができ、?
これと同じ考え方は、Javaを使用すると、ACことができますが、.NETやPythonの使用はTLEだった、と私は数回会いました。
しかし、私は現在、なぜ把握されていない問題のコードを記述することも可能です。
次のようにコードのJavaのバージョンは次のとおりです。
1 クラスソリューション{ 2 公共 INT assignBikes(int型、[] []の労働者をint型{[] []バイク) 3 DFS(労働者、0、バイク、新しいブール[bikes.length]を、0 ); 4 リターン分。 5 } 6 7 INT分= Integer.MAX_VALUEで、 8つの ボイド DFS(INT [] []労働者は、int型 iは、値int [] []バイク、ブール[]を用い、int型の合計){ 9 もし(I ==workers.length){ 10 分= Math.min(分、合計)。 11 リターン; 12 } 13 14 であれば(和>分)のリターン ; // 早期終了 15 16 のために(INT J = 0 ++; J <bikes.length {j)が 17 であれば(使用[J])続けます。 18 中古[j]は= 真。 19の DFS(労働者、I + 1、バイク、使用、和+ getDistance(研究者[I]、自転車[J]))。 20 中古[J] = 偽; 21 } 22 } 23 24 INT getDistance(INT []ワーカー、値int []バイク){ 25 リターン Math.abs(ワーカー[ 0 ] -自転車[ 0 ])+ Math.abs(作業者[ 1 ] -自転車[ 1 ] ); 26 } 27 }
参考住所:https://leetcode.com/problems/campus-bikes-ii/discuss/303375/Java-straightforward-DFS-solution