![](/img/trans.png)
[英]How to generate letter in all possible combinations with specific length limit?
[英]How to get all the combinations for an array of a specific length
假設我有這個要使用的字符數組:
var acceptableCharacters = ['a','b','c','d'];
我想得到這個數組的所有可能組合,比如從2
到4
的長度,所以 output 可能看起來像這樣
aa
ab
ac
ad
ba
bb
bc
bd
ca
cb
cc
cd
da
db
dc
dd
...等等...
生成器應該能夠滿足這些條件:
我不確定從哪里開始,所以一些入門代碼會很好。
編輯:
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.