You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将带重复次数的扁平化路径结构转换为嵌套结构?

如何将带重复次数的扁平化路径结构转换为嵌套结构?

看起来你需要把一组带重复次数的扁平路径,按照层级嵌套的规则展开成指定顺序的列表——父路径每次重复时,都要完整遍历并展开它的所有子路径的重复逻辑。这完全可以用递归实现,而且逻辑很清晰,我来给你拆解一下:

第一步:构建路径的树状结构

首先我们需要把扁平的路径转换成树,每个节点保存三个核心信息:

  • 当前路径字符串
  • 需要重复的次数
  • 按输入顺序排列的子节点列表

构建这棵树的思路很简单,可以用一个哈希表(字典)来快速查找每个路径对应的节点:

  • 遍历你的List<Pair<Path,Integer>>,对每一对路径和次数:
    1. 拆分出当前路径的父路径(比如/a/d/e的父路径是/a/d,/a/d的父路径是/a)
    2. 如果当前路径还没在哈希表中,就创建一个新节点,把路径、次数、空的子节点列表存进去
    3. 找到父路径对应的节点,把当前节点添加到它的子节点列表里(一定要保持输入顺序,这是输出正确的关键)

比如你的输入里,/a的子节点会按顺序是/a/b、/a/c、/a/d、/a/f、/a/g,而/a/d的子节点只有/a/d/e。

第二步:递归遍历树生成结果

有了树之后,递归逻辑就非常直观了:
我们写一个递归函数,传入一个节点,做两件事:

  1. 重复该节点指定的次数
  2. 每一次重复时,先输出当前节点的路径,然后递归遍历该节点的所有子节点(按顺序)

举个Python风格的伪代码例子:

class PathNode:
    def __init__(self, path, count):
        self.path = path
        self.count = count
        self.children = []

def generate_output(node, result):
    # 重复当前节点count次
    for _ in range(node.count):
        # 添加当前路径到结果列表
        result.append(node.path)
        # 按顺序递归遍历所有子节点
        for child in node.children:
            generate_output(child, result)

用你的输入构建好树之后,调用generate_output(root_node, []),就能得到你想要的输出列表了。

如果不想用递归,迭代解法怎么做?

递归的逻辑其实可以转换成栈的迭代方式,适合担心递归深度过大的场景(不过你的路径层级一般不会太深,递归其实足够用):
我们用一个栈来保存待处理的节点和它剩余的重复次数。每次从栈顶取出元素:

  • 如果剩余次数大于0:
    1. 先把当前节点的路径添加到结果
    2. 把当前节点重新压入栈,剩余次数减1
    3. 然后把该节点的所有子节点逆序压入栈(这样弹出时会保持原输入顺序),每个子节点的剩余次数是它的原始次数
  • 如果剩余次数为0,就跳过这个节点

举个迭代的伪代码片段:

def generate_output_iterative(root_node):
    result = []
    stack = [(root_node, root_node.count)]
    while stack:
        node, remaining = stack.pop()
        if remaining > 0:
            result.append(node.path)
            # 压回当前节点,次数减1
            stack.append((node, remaining - 1))
            # 逆序压入子节点,保证遍历顺序和输入一致
            for child in reversed(node.children):
                stack.append((child, child.count))
    return result

你可以根据自己使用的编程语言(比如Java用Stack类或者Deque)来调整这段逻辑,最终生成的结果和递归版本完全一致。

备注:内容来源于stack exchange,提问作者cobby

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 14:23:00