テキストや配列を理解します

方法:二重ポインタ方法、第一ソートアレイ

A = [12,6,8,1,4,3 ]
 DEF SUM2(ターゲット):
    RES = [] = ソート(a)の
    L、R = 0、LEN(A)-1
     、一方、L < R。
        TMP = [0,0]
         であれば、[L] + [R] == ターゲット:
            TMP [0] = [L] 
            TMP [ 1] = [R] 
            res.append(TMP)
            L + = 1 
            、R - = 1つ
         のelif [L] + [R]> ターゲット:
            R - = 1
         さもなければ
            L+ = 1つの
     戻り解像度
 印刷(SUM2(9))

出力:[1,8]、[3,6]

方法2:最初の方法については、メインの時間は、ソートを行うことに費やされている、我々は、ソートを避けるためにハッシュを使用することができます。

DEF SUM2(ターゲット):
    DIC = {} 
    RES = []
     のための I における範囲(LEN(A)):
        TMP = [0,0] 
        、M = A [i]の
         場合、ターゲット-M DIC:
            TMP [0 ] = m個の
            TMP [ 1] =標的- M 
            res.append(TMP)
        DIC [M] = iを
     返す解像度の
 プリント(SUM2(10))

出力:[1,8]、[3,6]

方法3:確立ハッシュテーブルを排除

DEF :SUM2(ターゲット)
    RES = []
     のための I における範囲(LEN(A)):
        TMP = [0,0]
         であれば   、標的[I] において、[I + 1]:
            TMP [0] = [I] 
            TMP [ 1] =標的- [I] 
            res.append(TMP)
    リターン解像度の
 プリント(SUM2(9))

出力:[[6,3]、[8,1]]

拡張:方法とは、三つ、四つ、および3つの数字の数、などに拡張することができます。

DEF SUM3(ターゲット):
    RES = []
     のための I における範囲(LEN(A))
         のために、J における範囲(I + 1 、(a)は、LEN):
            TMP = [0,0,0]
             であれば標的- [I] -a [J] [J + 1]:
                TMP [0] = [I] 
                TMPを[ 1] = [J] 
                TMPを[ 2] =ターゲット[I] - [ J] 
                res.append(tmp)に
    戻り RES
プリント(SUM3(13))

出力:[[6]、[4,3]、[8,1、4]

DEF sum4(ターゲット):
    RES = []
     のための I における範囲(LEN(A))
         のために、J における範囲(I + 1 、LEN(A))
             のために K 範囲(J + 1 、LEN(A )):
                TMP = [0,0,0,0]
                 であれば、標的[I] -a [J] -a [K] における [K + 1 :]:
                    TMP [0] = [I] 
                    TMP [ 1] = [J] 
                    TMPを[ 2] = [K] 
                    TMP [ - 3] =ターゲット[I] -a [j]を[K] 
                    res.append(TMP)
    戻り RES
プリント(sum4(24))

出力:[12、8、1、3]

拡張:アレイがNではなく番号であるが、繰り返すことができません

A = [12,6,8,1,4,3 ] 
のRES = []
 DEF nor_sum(ターゲット、POS、端、TMP):
     グローバルRES
     もしターゲット< 0:
         リターン
    もしターゲット== 0:
        res.append (TMP [:])
    のための I における範囲(POS、エンド):
        tmp.append([I])
        nor_sum(標的 -a [i]は、iは+ 1 、終わり、TMP)を
        tmp.pop()
nor_sum ( 12 、0、LEN(a)は、[])
 印刷(RES)

出力:[12]、[8]、[1,3]、[8,4]

赤がマークとして:(主な違いは)繰り返すことができます

A = 12,6,8,4,3 ] 
のRES = []
 DEF nor_sum(ターゲット、POS、端、TMP):
     グローバルRES
     もしターゲット< 0:
         リターン
    もしターゲット== 0:
        res.append(TMP [:])
    のための I における範囲(POS、エンド):
        tmp.append([I])
        nor_sum(標的 - [i]は、I、終了、TMP)
        tmp.pop()
nor_sum( 12 、0、LEN(a)は、[])
 印刷(RES)

出力:[12]、[6,6]、[6]、[3,3]、[8,4]、[4,4]、[4]、[3、3、3、3]

 

おすすめ

転載: www.cnblogs.com/xiximayou/p/11622102.html
おすすめ