[アルゴリズム] 46.順列

異なる整数の集合を考えると、すべての可能な順列を返します。

例:

入力:[1,2,3]
出力:
[
  [1,2,3]
  [1,3,2]
  [2,1,3]
  [2,3,1]
  [3,1,2]
  [3,2,1]
]

 

アイデアは、再帰的なアプローチを使用して、我々は、再帰関数を定義することができます

ヘルパー(接頭辞、接尾辞、結果)

どこプレフィックスは次のとおりです。たとえば

[1]

サフィックス:

[2、3]

毎回だから、我々は接頭辞に入れサフィックスから一つの値を取ります。

 

停止ロジックは、接尾語の長さがゼロのとき、我々は結果に接頭辞を押すことです。

もし(sfx.length === 0 ){
     result.push(PFX)。
}

 

/ * *
 * @param {数[]} NUMS
 * @return {数[] []}
 * / 
VAR並び替える= 関数(NUMS){
     関数ヘルパー(PFX、SFX、結果){
         場合(sfx.length === 0 ){
            result.push(PFX)。
        } {
            constのLEN = sfx.length。
            ため(LET iが0 =、iは<lenは、I ++ ){
                ヘルパー(
                    pfx.concat(SFX [i])と、 
                    sfx.slice( 0、I).concat(sfx.slice(I + 1 、SFX [のみ]))、
                    結果
                );
            }
        }
        
        戻り値の結果;
    }
    
    戻りヘルパー([]、NUMS、[])。
}。

交流([ 1,2,3 ])

/ *

[1,2,3]、[1,3,2]、[2,1,3]、[2,3,1]、[3,1,2]、[3,2,1]

* /

 

[]、[1,2,3 ]

[ 1]、[2,3 ]

[ 1]、[2]、[3]、[] | [1,3]、[2 ]

---> [1,2,3] | [1,2,3 ]

[ 2]、[1,3 ]
[ 2、1]、[3] | [2,3] [1 ]

- > [2,1,3] | [2,3,1 ]

[ 3]、[1,2 ]
[ 3,1] [2] | [3,2]、[1 ]

 - > [3,1,2] | [3,2,1]

 

おすすめ

転載: www.cnblogs.com/Answer1215/p/12008553.html