问题来源:《有意思的面试题-数独问题》
《多个数组,每个数组中选择一项,总共能有多少种组合,reduce函数实现》
这种问题,我认为是路径问题,以下面的两个数组举例,第一次有2个选择,然后再选,还有2个选择。总共有2x2=4种选择。 [1, 2], [3, 4] 总共有2x2=4种选择。 [1, 2], [3, 4],[5, 6, 7, 8] 总共 2x2x4=8中选择。
数据小还很方便的,但我遇到了,这些路径的组合:
[[6, 8], [2, 5], [1, 9], [3, 9], [3, 5], [3, 9], [8, 9], [3, 6], [2, 9], [2, 3, 8], [2, 3, 6], [2, 5, 8], [1, 5, 8], [1, 6, 9], [5, 6, 9], [1, 3, 5], [3, 5, 6], [3, 8, 9]]这些字符串的组合总共有2x2x2x2x2x2x2x2x2x3x3x3x3x3x3x3x3x3,这么多种组合。 所以我就使用tree中数据结构。我现在的是python版本的treelib。
这个是摘自https://treelib.readthedocs.io/en/latest/官方文档的一串代码,用于感性认识吧。
>>> from treelib import Node, Tree >>> tree = Tree() >>> tree.create_node("Harry", "harry") # root node >>> tree.create_node("Jane", "jane", parent="harry") >>> tree.create_node("Bill", "bill", parent="harry") >>> tree.create_node("Diane", "diane", parent="jane") >>> tree.create_node("Mary", "mary", parent="diane") >>> tree.create_node("Mark", "mark", parent="jane") >>> tree.show() Harry ├── Bill └── Jane ├── Diane │ └── Mary └── Mark1.创建树: tree = Tree()
2.以树型结构进行打印: tree = Tree()
3.获取所有从根节点到叶子节点的路径,返回的是一个list结构,里面存贮的是node的ID,ID为string类型。 tree.paths_to_leaves()
4.移除以一个节点,同时移除其所有的子节点 ,返回值为移除的节点个 tree.remove_node( identifier)
5.返回所有叶节点对象list列表,若给定root则返回以root为根节点的树的所有叶节点对象list列表 leaves(self, root=None)