例:入力:K = 3、N = 9
出力:[[1,2,6]、[1,3,5]、[2,3,4]]
入力:K = 2、N = 5
出力:[[1,4] [2,3]]
1!#は/ usr / binに/ ENVパイソン 2# - * -コーディング:UTF- 8 - * - 。3 "" " 。4#@time:2019 / 12は / 19 21である:11。 5。 6。 #@author:ZFJ 7。 8。 #@file:k及びn.pyの数 9。 10 #@Software:PyCharm 。11 "" " 12である ' '' 13である 1。最初のテストリストの結果=結果。[] 14 15 2 トレースバック機能がFlash_back(NUM、現在の定義。 、TMPは、next_sum)numが使用されている図面の現在の数の数であり、現在訪れて、表す現在の数 16 tmpが現在の中間結果、next_sumを示し、次のターゲットを表します。 17 。A ==がNUM想定我々はKの数の使用を記載している、Kを、 18である 。B ==がnext_sum想定0 、次に中間結果だけnは、TMP、我々は結果リストTMPに追加することができ 19 。我々は、C区間は[現在、ある横切ること注10)、0からされているために、正の数との間の9。 20である 伝説の剪定今最適化する必要がDされる: 21である 1。)Jもし> next_sum、それは以下の図を示しており、目標よりも大きい、直接BREAK 22は 2 Flash_back(NUM +機能トレースバック)を行う。1、J + 。1、TMPは+ [J]、next_sum- J) 23である 。3。Flash_back再度実行します(0、1 、[]、N-) 24 25 4 。のリストに結果を返す 26は、 27 28 ' '' 29 30 31である クラス溶液(オブジェクト): 32 DEF combinationSum3(N-セルフ、K): 33である "" " 34である :タイプK:INT 35 :n型INT 36 :RTYPE:リスト[リスト[ INT ] 37 " " " 38 #1 。結果定義されたリスト 39 の結果は= [] 40 41である #2がバック関数を定義する。 42である DEF Flash_back(NUM、現在、TMP、next_sum): 43である IF NUM == Kは: 44であります もし next_sum == 0 : 45 result.append(TMP) 46 リターン 47 のための J における範囲(現在、10 ): 48 であれば J> next_sum: 49 休憩 50 Flash_back(NUM + 1、J + 1、TMP + [J] 、next_sum - J) 51 52 Flash_back(0、1 、[]、N) 53 リターン結果 54 55 56 A = 溶液() 57B = a.combinationSum3(K = 3、N = 7 ) 58プリント(B)
個人の概要:身体の用途はバックトラックするので、その外観は、非常に高い効率ではありませんどのように改善するかについて考え、我々は交換を歓迎します
時間計算:もう一度最初から最後まで行きますので、それはO(nは!)
宇宙複雑さは:唯一のストレージのリストによって、それはO(1)であります