golang 组合算法

<span style="color:#009900;">//递归输出组合内容</span>
func combineloop(arr []string, r []string, i int, n int, output chan<- []string) {
    if n <= 0 {
        return
    }
    rlen := len(r) - n
    alen := len(arr)
    for j := i; j < alen; j++ {
        r[rlen] = arr[j]
        if n == 1 {
            or := make([]string, len(r))
            copy(or, r)
            output <- or
        } else {
            combineloop(arr, r, j+1, n-1, output)
        }
    }
}
//对数组进行组合
func GetCombineMatch(arr []string, n int) []string {
    var matchArr []string
    output := make(chan []string)
    r := make([]string, n)
    go func() {
        combineloop(arr, r, 0, n, output)
        close(output)
    }()
    for arr := range output {
        var str string
        for i, each := range arr {
            if i == 0 {
                str = each
            } else {
                str = fmt.Sprintf("%v,%v", str, each)
            }
        }
        matchArr = append(matchArr, str)
        fmt.Println(arr)
    }
    return matchArr
}


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值