首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在C#中有可能像这样组合一个单词列表吗?

在C#中有可能像这样组合一个单词列表吗?
EN

Stack Overflow用户
提问于 2022-06-14 07:26:21
回答 1查看 80关注 0票数 0

有一个数组,比如{A, B, C},我想创建一个集合,如下所示

代码语言:javascript
复制
Array Input: {A, B, C}
Output:      {A, B, C}, 
             {AB, C}, 
             {A, BC}, 
             {ABC}

或者如果是{A, B, C, D}

代码语言:javascript
复制
Array Input: {A, B, C, D}
Output:      {A, B, C, D}, 
             {AB, C, D}, 
             {ABC, D}, 
             {AB, CD}, 
             {ABCD}, 
             {A, BC, D}, 
             {A, BCD}, 
             {A B CD}

我正在考虑用C#来解决这个问题,但我还没能解决这个问题。

你能对这个算法进行编码吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-14 07:51:21

是的,通常情况下,您可以将每一个可能的拆分编码为01 (truefalse),以具有所有的组合:

代码语言:javascript
复制
  A     B     C     D
     ^     ^     ^
  0 or 1  ...  0 or 1    

例如:

代码语言:javascript
复制
  ABCD    - 000 (no splits)
  A,BCD   - 100 (split, then no splits)
  AB,CD   - 010 (no split, split, no split)
  ABC,D   - 001
  AB,C,D  - 011
  A,B,CD  - 110
  ...
  A,B,C,D - 111 (all splits)        

代码:

代码语言:javascript
复制
private static IEnumerable<List<List<T>>> MySolution<T>(IEnumerable<T> source) {
  if (source is null)
    throw new ArgumentNullException(nameof(source));

  var array = source.ToArray();

  if (array.Length <= 0)
    yield break;

  for (int mask = 0; mask < 1 << (array.Length - 1); ++mask) {
    List<List<T>> result = new List<List<T>>();

    result.Add(new List<T>() { array[0] });

    for (int index = 0; index < array.Length - 1; ++index) {
      if ((mask & (1 << index)) != 0)
        result.Add(new List<T>() { });

      result[result.Count - 1].Add(array[index + 1]);
    }

    yield return result;
  }
}

演示:

代码语言:javascript
复制
  char[] demo = new char[] { 'A', 'B', 'C', 'D' };

  var result = MySolution(demo)
    .Select(rec => "{" + string.Join(", ", rec
      .Select(item => string.Join("", item))) + "}");

  Console.WriteLine(string.Join(Environment.NewLine, result));

输出:

代码语言:javascript
复制
{ABCD}
{A, BCD}
{AB, CD}
{A, B, CD}
{ABC, D}
{A, BC, D}
{AB, C, D}
{A, B, C, D}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72613010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档