我想通过递归来解决问题。我有一个给定的字母列表,我想要这些字母的所有排列,直到达到给定的长度。
var letters= ["A", "B", "C", "D", "E", "F"];
function myRekursion(alphabet, n){
if(n > 0){
for(var i = 0; i < letters.length; i++){
document.write(letters[i]);
myRekursion(letters, n - 1);
}
document.write(",<br>");
}
}
myRekursion(letters,3);
我不明白为什么我一直浏览完整列表而不是创建一个类似的列表:AAA,AAB,AAC,...,FFF
你有办法帮我解决吗?
它被称作cartesian product
.
您可以使用 ES6 功能来实现此目的:reduce
and map
方法。
在集合论中(通常在数学的其他部分),
笛卡尔积是一种数学运算,它返回一个集合
多套。
function cartesianProduct(array ,n) {
arrayToWork = [];
for(i = 0;i < n;i++)
arrayToWork.push(array);
return arrayToWork.reduce((a, b) =>
a.map(x => b.map(y => x.concat(y)))
.reduce((a, b) => a.concat(b), []), [[]]);
}
console.log(cartesianProduct(['A','B','C','D','E','F'],3));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)