数组组合

问题1

12345678 取三位数组成一个新数组,可重复,求所有组合

function foo(str, sNum, result, ret) {
    if (typeof ret === 'undefined') {
        ret = [];
    }
    if (typeof result === 'undefined') {
        result = [];
    } else {
        if (result.length == sNum) {
            ret.push(result.concat());
            return false;
        }
    }
    var i = 0;
    for (; i < str.length; i++) {
        result.push(str[i]);
        foo(str, sNum, result, ret);
        result.pop();
    }
    return ret;
}

var ret = foo('12345678', 3);
console.log(ret);

[[1,2,3],[4],[5,6],[7,8,9,0]] n个第二维数组中取1位数组成一个新数组,求所有组合

var wocao = [[1,2,3],[4],[5,6],[7,8,9,0]]
function nima(wocao,aaa,bbb,result){
    if(!aaa){aaa=0}
    if(!bbb){bbb=[]}
    if(!result){result=[]}
    if(bbb.length==wocao.length){
        result.push(bbb.slice(0))
        return false
    }
    for(var i=0;i<wocao[aaa].length;i++){
        bbb.push(wocao[aaa][i])
        aaa++;
        nima(wocao,aaa,bbb,result)
        bbb.pop();
        aaa--;
    }
    return result
}
console.log(nima(wocao))

优化版

var data = [[1, 2, 3], [4], [5, 6], [7, 8, 9, 0]]
var foo = (function() {
    var index = 0
    var tmp = []
    var result = []
    return function (data) {
        if (tmp.length == data.length) {
            result.push(tmp.slice(0))
            return false
        }
        for (var i = 0; i < data[index].length; i++) {
            tmp.push(data[index][i])
            index++;
            foo(data)
            tmp.pop();
            index--;
        }
        // aa++
        return result
    }
})()
console.log(foo(data))
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 01水平组合 hstack 和concatenate 函数也可以实现,axis = 1 可以实现 02垂直组合 ...
    小螳螂阅读 561评论 0 1
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,558评论 25 708
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,270评论 0 4
  • 虽说好汉不提当年勇。 但深夜悄悄给自己鸡血一把,还是挺激动的。 你以为我完啦? nonono,才刚开始而已~ 人生...
    木筱茜阅读 120评论 0 0
  • 1.曙光期:3D打印、VR技术 2.朝阳期:大数据、人工智能、互联网等 3.平台期:高水准,行业发展放缓到停滞,如...
    唐花花阅读 211评论 0 0