Go语言实现可变行数二维数组元素全组合生成方案求助
Go语言实现可变行数二维数组的元素全组合生成
给定如下二维字符串数组:
matrix = [ ['A', 'B', 'C'], ['D'], ['E', 'F'], ['G', 'H'] ]
需要从每行中选取一个元素,生成所有有序组合,输出格式示例如下:
ADEG, ADEH, ADFG, ADFH, BDEG, BDFG ... CDFG CDFH
要求遍历所有可能的组合,且数组的行数、每行的元素个数都可以动态变化。如果是固定行数,可以用多层嵌套循环实现,但行数未知时,递归是更合适的方案。
在Python中这类需求通常可以直接借助内置的itertools.product函数实现,但Go语言没有类似的内置工具,需要自行实现。
下面是转换而来的Go语言递归实现代码,也可供其他非Python开发者参考:
var combinations = []string{} // combine 从每行选取元素,拼接生成所有组合 func combine(terms [][]string, accum string) { last := len(terms) == 1 n := len(terms[0]) for i := 0; i < n; i++ { item := accum + terms[0][i] if last { combinations = append(combinations, item) } else { combine(terms[1:], item) } } }
代码说明
- 全局变量
combinations用于存储最终生成的所有组合结果 - 递归函数
combine接收两个参数:剩余待处理的二维数组terms,以及当前已拼接的字符串accum - 每次处理二维数组的第一行,遍历该行的所有元素,将元素拼接到
accum上 - 如果是最后一行,就把拼接好的字符串加入结果数组;否则递归处理剩余的行
内容的提问来源于stack exchange,提问作者davo36
相关产品推荐
相关产品推荐

