c# - 字符串列表的排列算法

标签 c# algorithm combinatorics

我需要帮助了解如何编写排列算法。 (如果这是偶数排列,它们必须按顺序排列并使用相同的值)。

List<string> str = new List<string>{"a", "b", "c", "d"};

如何获取此列表中可用的每个排列的列表?例如。

  1. a、b、c、d
  2. ab、c、d
  3. ab、cd
  4. abc、d
  5. abcd
  6. a、bc、d
  7. a、bcd
  8. a、b、cd

出于某种原因,我找不到开始的模式。当连接的字符串有 X 个字符时,我还希望能够忽略排列。因此,如果 X 为 4,则在该列表中,数字 5 将不存在,并且会有 7 种排列。

private List<string> permute(List<string> values, int maxPermutation)
{
     //alittle help on starting it would be great :)
}

我查看并阅读了 this ,但他不遵守命令。

最佳答案

这相当简单:您可以在三个位置放置逗号或不放置任何内容。 2^3 二进制数对应有八种组合。

对于从 0 到 7(含)的每个数字,生成一个二进制表示形式。在二进制表示为 1 的每个位置加一个逗号;不要在零处添加逗号。

for (int m = 0 ; m != 8 ; m++) {
    string s = "a";
    if ((m & 1) != 0) s += ",";
    s += "b";
    if ((m & 2) != 0) s += ",";
    s += "c";
    if ((m & 4) != 0) s += ",";
    s += "d";
    Console.WriteLine(s);     
}

关于c# - 字符串列表的排列算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9050204/

相关文章:

c - 3D 骰子生成算法

javascript - 分区集使得笛卡尔积服从约束

python - 合并元组列表中的元组

c# - 查找两个数组之间所有可能的值组合

C#/Java 数字随机化

c# - 有两个 Page_Load 而不覆盖

algorithm - 将数据发送到串口的最佳方式是什么?

algorithm - 查找列表元素的任意长度子集

c# - 在 Windows Phone 应用程序中按下后退按钮导航到后退两页

c# - 为什么在 C# 中使用 finally?