javascript - 用于从数组打印排列的递归算法
问题描述
我有一个数组如下:
charSet = [
["A", "B"],
["C", "D", "E"],
["F", "G", "H", "I"]
];
我想打印第一列中 charSet[0] 中的元素的所有排列,第二列中 charSet[1] 中的元素等:
ACF, ACG, ACH, ACI, ADF, ADG, ... BEI
该函数必须能够采用任意数量的列,并且每个列中可能包含任意数量的字符。所以,需要递归。不幸的是,我的大脑似乎无法处理递归。我认为通过将不灵活的解决方案编写为一组嵌套的 for循环,可能有助于使递归解决方案更清晰:
for(i=0; i<charSet[0].length; i++){
a[0] = charSet[0][i];
for(j=0; j<charSet[1].length; j++){
a[1] = charSet[1][j];
for(k=0; k<charSet[2].length; k++){
a[2] = charSet[2][k];
console.log(a.join(''));
}
}
}
8 小时和许多失败的尝试之后,我得出的结论是它没有帮助。到目前为止,我最大的努力是:
function printOutput(len) {
if(len==0){
console.log(a.join(''));
return;
}
for(i = 0; i<charSet[len-1].length; i++){
a[len-1] = charSet[len-1][i];
printOutput(len-1);
}
}
printOutput(charSet.length);
我可以明白为什么它不起作用,但我还没有更接近于弄清楚什么会起作用。请帮忙!
解决方案
推荐阅读
- python - 如何在不丢失索引的情况下在 Python 中“过滤”出列表
- android - 无法解析 org.jetbrains.trove4j:trove4j:20160824
- mysql - 如果列具有连续重复项,则 Hive collect_list() 以收集列值
- c# - 当大文本打开时,堆栈布局不适合元素
- oracle-apex - Oracle Apex 20.1 将 x 轴上的日期转换为 dd.mm.yyyy
- excel - 关闭上次打开的工作簿
- python - 我如何覆盖管理页面中的 save() 方法
- sql - 与记录集一起返回的自动 ID
- ffmpeg - 使用 ffmpeg 将 mp3 转换为 wav 会降低质量和持续时间
- laravel - Laravel WebSockets 在连接建立之前关闭