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

JS转Dart:递归allConstruct函数翻译结果异常问题排查

修复Dart版allConstruct函数的问题

问题分析

你的Dart代码存在几个关键错误,导致输出结果不符合预期:

  • 函数名拼写偏差:原JavaScript函数名为allConstruct,你的代码写成了allContruct(少了一个s),虽不影响逻辑,但建议保持命名统一。
  • 后缀字符串获取方式错误:使用target.split(word)[1]存在风险,比如当word完全匹配target时,split会返回['', ''],更可靠的方式是用target.substring(word.length),和JavaScript的slice行为完全一致,直接截取从word长度位置开始的子串。
  • 结果集合添加逻辑错误:JavaScript中result.push(...targetWays)是将targetWays中的每一个元素展开添加到result数组;而你的代码用result.insert(0, targetWays)是把map返回的整个Iterable作为单个元素插入到result开头,这会导致结果嵌套层级错误,且顺序不符合预期。
  • 缺少强类型声明:Dart是强类型语言,未指定函数返回类型和变量类型,容易引发动态类型相关的隐性问题。

修正后的代码

List<List<String>> allConstruct(String target, List<String> wordBank) {
  if (target == '') return [[]];

  final List<List<String>> result = [];

  for (final String word in wordBank) {
    if (target.startsWith(word)) {
      final String suffix = target.substring(word.length);
      final List<List<String>> suffixWays = allConstruct(suffix, wordBank);
      final List<List<String>> targetWays = suffixWays.map((way) => [word, ...way]).toList();
      result.addAll(targetWays);
    }
  }

  return result;
}

测试验证

调用allConstruct('purple', ['purp', 'p', 'ur', 'le', 'purpl']),输出结果为:
[['purp', 'le'], ['p', 'ur', 'p', 'le']],与JavaScript版本的输出完全一致。

内容的提问来源于stack exchange,提问作者Peppinhood

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 02:24:22