異なる整数の集合を考えると、すべての可能な順列を返します。
例:
入力:[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]