JavaScript递归生成排列组合[已解决]

背景
我是做美团外卖的
经常会回复顾客的评价
每次都要手工打一次,太麻烦了
就想自动生成一些简单的评价,直接复制就可以了
结果真心是逻辑思维能力太差..怎么也过不了递归这一关.....试了快2个小时,还是解决不了

数组

var wordList = [
    ['热烈', '万分', '非常', ''],
    ['欢迎', '感谢', '谢谢'],
    ['您', '亲', '老板', '大神', ''],
    ['光临', '惠顾', '支持'],
    ['小店', '本店', '火女菜馆']
];

问题
怎么自动排列组合出来
热烈欢迎您光临小店,热烈欢迎您光临本店....非常谢谢大神支持火女菜馆

麻烦大家帮忙看看这个题怎么解
然后指出一下我究竟是哪里的问题?为什么就是想不出来怎么解这个题目,要通过哪些练习才可以自己处理这种问题呢?
这感觉就像是初中做数学题一样,就是不知道怎么办...

我的解法
虽然是解出来了,但完全是靠猜的.没有思路,要是再遇到类似的递归问题,肯定还是没有思路.
并且这个写法肯定不是最优解....还是上面的问题.请大家指教一下

function combine(i, results, res) {
    for (var j = 0; j < wordList[i].length; j++) {
        var temp = res;
        res += wordList[i][j];
        if (wordList[i + 1]) combine(i + 1, results, res);
        else {
            results.push(res);
        }
        res = temp;
    }
}
var results = [];
combine(0, results, '');
console.log(results);
看样子只适合做业务层面的浅编程啦...稍微要涉及到算法的东西都理解的很困难,一楼的那个效率要高好多
阅读 4.9k
1 个回答

你是想生成一个全排列的结果吧
你这个一共有
3x3x4x3x3 种可能的
而且这个不应该用递归吧,直接就可以5层循环全遍历啊,为什么要递归?
还有一种办法,递归都不需要,用位运算就可以提取出来,根据你的情况,就是一个10位二进制数,每2位代表一个就可以提取出来了,不过要注意做过滤。
我实现一下后面一种情况。

var wordList = [
    ['热烈', '万分', '非常', ''],
    ['欢迎', '感谢', '谢谢'],
    ['您', '亲', '老板', '大神', ''],
    ['光临', '惠顾', '支持'],
    ['小店', '本店', '火女菜馆']
];
for(let i=0;i<1024;i++){
    //把i按2bit分成5份
    b2t0=i&3
    b2t1=(i>>2)&3
    b2t2=(i>>4)&3
    b2t3=(i>>6)&3
    b2t4=(i>>8)&3
    if( (b2t0==3)|| (b2t1==3) ||(b2t3==3) ||(b2t4==3)) continue
    console.log(wordList[0][b2t0]+wordList[1][b2t1]+wordList[2][b2t2]+wordList[3][b2t3]+wordList[4][b2t4])
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题