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

递归实现count_construct函数无法重复使用词库元素的修复需求

递归实现count_construct函数无法重复使用词库元素的修复需求

你遇到的问题核心是当前递归逻辑限制了选词的范围——只能按词库顺序往后选,一旦跳过某个词,就再也没法回头用它了,这直接导致p+ur+p+le这种需要重复使用前面词库元素的组合被漏掉,所以才会少算一种情况。

问题出在哪?

你的helper函数用index参数控制遍历词库的进度:当你选择跳过当前词(count_without_current = helper(index + 1, current)),index会递增,后续递归就只能从更靠后的词开始选。比如当你处理到ur(index=2)之后,就再也没法选到前面的p(index=1),自然生成不了需要二次使用p的那条路径。

修复方案

我们需要改成每次递归都能遍历整个词库的逻辑,允许重复使用任意词库元素,不受顺序限制。修改后的代码如下:

def count_construct(target, word_bank):
    def helper(current):
        # 终止条件:拼出目标字符串,算一种有效组合
        if current == target:
            return 1
        # 终止条件:拼接长度超过目标,直接返回0
        if len(current) > len(target):
            return 0
        
        total_count = 0
        # 遍历整个词库,每个词都尝试拼接
        for word in word_bank:
            # 提前检查拼接后是否是目标的前缀,避免无效递归
            if target.startswith(current + word):
                total_count += helper(current + word)
        return total_count
    
    return helper('')

测试验证

用你的示例测试:

target_example = "purple"
word_bank_example = ["purp", "p", "ur", "le", "purpl"]
print(count_construct(target_example, word_bank_example))  # 输出2,符合预期

这个逻辑的核心是,每次递归都不限制选词的范围,只要当前拼接后的字符串是目标的前缀,就可以继续用这个词(或其他任意词)往下拼,完美覆盖了所有可能的组合方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 07:09:33