【问题标题】:Generate skipable list based on chars [closed]基于字符生成可跳过列表[关闭]
【发布时间】:2019-10-07 21:00:41
【问题描述】:

我很确定这个问题有一个技术术语,但不幸的是我不知道。 我有一个字母字符集,要求是创建具有最大长度的所有字符的组合

想法是(示例):

  • 生成 A、AA、AAA、AAAA、AAAAAA、AAAAAA 的集合
  • 下一个:A、AB、ABA、ABAA、ABAAAA
  • 下一个 A、AB、ABB、ABBA、ABBAA

原因: 我们必须查询一个提供搜索结果的 API。

但是,如果我没有从 AAA 上的 API 获得搜索命中,我就不需要再搜索 AAAA,因为它也无法获得搜索命中。然后我可以转到 AAB。

问题:

我的问题是我不确定如何构建代码才能实现这一目标。我缺乏结构方法。 我已经尝试过嵌套循环,但不幸的是我没有得到结果。 我也使用过组合库,但它们专注于其他问题。

非常感谢您的提示!

【问题讨论】:

  • 您是否正在寻找 yield 上下文关键字? docs.microsoft.com/en-us/dotnet/csharp/language-reference/… 让您有机会通过方法动态生成IEnumerable 的成员。
  • 所以它可以上升到字母表中的所有 26 个字母?
  • 您是在寻求有关列出所有可能组合的帮助,还是在寻求有关如何在 API 调用中跳过一代的逻辑方面的帮助?
  • 是的,我知道如何使用yield,谢谢。但是我的问题是如何在这里生成逻辑。
  • 很不清楚你有什么问题......显然在你的递归解决方案中你有类似if (continueRecursion) recursiveCall() else return;的东西应该生成你想要的列表......所以没有实际看到代码它不是真的可以帮忙...

标签: c# string list


【解决方案1】:

您正在寻找的是一个特定的数据结构,称为 Tree,但在您的情况下可能更具体地称为 Trie

Trie 数据结构通常用于自动完成等事物。使用下图,如果有人输入“te”,我可以遍历 Trie 并查看之后会出现哪些选项(tea、ted、10)。

据我所知,这似乎也适合您的用例。

【讨论】:

  • 这可能是一个有趣的方法。非常感谢。
  • 它可能有点过时了,但是可以在这里找到一篇不错的面向 .NET 的文章,看看这样的东西在实践中是如何工作的 - visualstudiomagazine.com/articles/2015/10/20/…
猜你喜欢
  • 1970-01-01
  • 2015-07-28
  • 2011-03-03
  • 2018-06-06
  • 1970-01-01
  • 1970-01-01
  • 2020-07-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多