簡體   English   中英

如何獲取特定長度數組的所有組合

[英]How to get all the combinations for an array of a specific length

假設我有這個要使用的字符數組:

var acceptableCharacters = ['a','b','c','d'];

我想得到這個數組的所有可能組合,比如從24的長度,所以 output 可能看起來像這樣

aa
ab
ac
ad
ba
bb
bc
bd
ca
cb
cc
cd
da
db
dc
dd

...等等...

生成器應該能夠滿足這些條件:

  • 針對 2 種長度之間的所有組合,或允許自己接受任何不同的長度
  • 字母可以重復自己

我不確定從哪里開始,所以一些入門代碼會很好。

編輯:

    var characters = ['a','b','c','d'];
    var combinations = [];
    for(var i=2;i<=4;i++) {
        var str = "";
        for(var c of characters) {
            str+=c;
            // 'a' spam
        }
        combinations.push(str);
    };
    console.log( combinations );

我不知道如何迭代字符¯_(ツ)_/¯

它看起來像這樣:

ab
abc
abcd

我在您的代碼中看到的問題是,對於每個額外的組合長度,您需要一個嵌套循環,即對於長度 2,您需要一個雙嵌套迭代,對於長度 3,您需要一個三重嵌套迭代,依此類推。

嘗試使用遞歸實現。 它遞歸到長度為 1 的基本情況並構建結果集。

 const characters = ["a", "b", "c", "d"]; const combinations = (arr, min = 1, max) => { const combination = (arr, depth) => { if (depth === 1) { return arr; } else { const result = combination(arr, depth - 1).flatMap((val) => arr.map((char) => val + char) ); return arr.concat(result); } }; return combination(arr, max).filter((val) => val.length >= min); }; const result = combinations(characters, 2, 4); console.log(`Combinations: ${result.length}`, result);

這是一個非遞歸版本; 它最終變得更簡單了。

 const characters = ["a", "b", "c", "d"]; const combinations = (arr, min = 1, max) => [...Array(max).keys()].reduce( (result) => arr.concat(result.flatMap((val) => arr.map((char) => val + char))), [] ).filter((val) => val.length >= min); const result = combinations(characters, 2, 4); console.log(`Combinations: ${result.length}`, result);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM