1. ホーム
  2. javascript

[解決済み] JavaScriptで並べ替え?

2022-04-21 20:40:51

質問

以下のような関数を書こうとしています。

  • 引数として整数の配列を受け取る (例: [1,2,3,4])
  • 1,2,3,4]のすべての並べ換えの配列を作成します(各並べ換えの長さは4)。

以下の関数(オンラインで見つけました)は、引数として文字列を受け取り、その文字列のすべての並べ換えを返すことによって、これを行います。

整数の配列で動作するように変更する方法がわかりませんでした。(これは、いくつかのメソッドが文字列と整数で異なる動作をすることと関係があると思いますが、よくわかりません...)。

var permArr = [], usedChars = [];
function permute(input) {
  var i, ch, chars = input.split("");
  for (i = 0; i < chars.length; i++) {
    ch = chars.splice(i, 1);
    usedChars.push(ch);
    if (chars.length == 0)
      permArr[permArr.length] = usedChars.join("");
    permute(chars.join(""));
    chars.splice(i, 0, ch);
    usedChars.pop();
  }
  return permArr
};

注:この関数が返す配列は 整数 , ない の配列は 文字列 .

私はどうしてもJavaScriptで解決する必要があるのです。私はすでにpythonでこれを行う方法を考え出した

どのように解決するのですか?

このコードでは、並べ替えを行う前に文字列を配列に分割しているので、結合と分割の操作を削除するだけです。

var permArr = [],
  usedChars = [];

function permute(input) {
  var i, ch;
  for (i = 0; i < input.length; i++) {
    ch = input.splice(i, 1)[0];
    usedChars.push(ch);
    if (input.length == 0) {
      permArr.push(usedChars.slice());
    }
    permute(input);
    input.splice(i, 0, ch);
    usedChars.pop();
  }
  return permArr
};


document.write(JSON.stringify(permute([5, 3, 7, 1])));