これは私がSOに質問をしなければならない初めてのことです。私はいつも私の問題のほとんどを解決する答えを見つけるが、今回私はヒープの順列アルゴリズムに悩まされている。私はこのチャレンジをしばらく解決しようとしてきましたので、私よりもプログラミングの知識が優れている人がいます。私の順列アルゴリズムは、すべての順列について私に同じ結果を与えるのはなぜですか?
私は値のあらゆる可能な順列を再帰的に見つけるために、いくつかのJavaScriptコードを書いた:配列か文字列。私のコードは、console.log()で置換された値を使うと完璧に動作しているようですが、別の配列にプッシュすると同じ値が得られます。よくわかりません。たぶん、私は何かばかげている、誰が知っている。どのような助けもありがとう、高度な人のおかげで。
私のコードには2つの機能があります:1つは要素の入れ替えを行い、もう1つは再帰的に可能な順列を探します。
arr = ["a", "b", "c"];
newArr = [];
// swap mechanism here
function swap(arr, pos1, pos2) {
var temp = arr[pos1];
arr[pos1] = arr[pos2];
arr[pos2] = temp;
};
function perm(arr, nArr, n) {
n = n || arr.length;
if (n === 1) {
console.log(arr); // console.log() works great
newArr.push(arr); // pushing the permuted values does not
}
else {
for(var i = 1; i <= n; i += 1) {
perm(arr, nArr, n - 1);
if (n % 2) {
var j = 1;
}
else {
var j = i;
}
swap(arr, j - 1, n - 1);
}
}
};
ようこそStackOverflow。ヘルプドキュメントの投稿ガイドラインを読み、それに従ってください。 [最小、完全で検証可能な例](http://stackoverflow.com/help/mcve)がここに適用されます。 MCVEコードを投稿して問題を正確に記述するまでは、効果的にお手伝いすることはできません。 投稿したコードをテキストファイルに貼り付け、説明した問題を再現できるはずです。 – Prune