我有一個C#列表:列表產生一組特定的組合
- 甲
- 乙
- 甲
- Ç
- d
- 甲
如何能我發現所有的字母組合,其中我以下信件的索引總是更大。所以在這種情況下,組合可以是:A,AB,ABA,C,CD,ADA ...但不是DC,CB ...因爲B索引在C索引之前出現在最後一個例子中。使用索引,1,12,123,146,134將被接受,但類似143的將不被接受,因爲4大於3.
我有一個C#列表:列表產生一組特定的組合
如何能我發現所有的字母組合,其中我以下信件的索引總是更大。所以在這種情況下,組合可以是:A,AB,ABA,C,CD,ADA ...但不是DC,CB ...因爲B索引在C索引之前出現在最後一個例子中。使用索引,1,12,123,146,134將被接受,但類似143的將不被接受,因爲4大於3.
簡單地生成集合{1,2,3,4,5,6}
的所有非空子集。對於每個這樣的子集,只需取其數字(按遞增順序)並將其轉換爲相應的字母。這樣你將得到所有可能的字母序列。然後,如有必要,您必須刪除重複項 - 例如A
將通過組{1}
,{3}
和{6}
生成三次。
此代碼生成所有的組合(如列表的順序):
static void Main(string[] args)
{
GetCombination(new List<char> { 'A','B','C' });
Console.ReadKey();
}
static void GetCombination(List<char> list)
{
for (int i = 1; i < Convert.ToInt32(Math.Pow(2, list.Count)); i++)
{
int temp = i;
string str = "";
int j = Convert.ToInt32(Math.Pow(2, list.Count - 1));
int index = 0;
while (j > 0)
{
if (temp - j >= 0)
{
str += list[index];
temp -= j;
}
j /= 2;
index++;
}
Console.WriteLine(str);
}
}
,輸出是:
C
B
BC
A
AC
AB
ABC
我認爲這是因爲有3'A's列表,所以'ABA'是'123'(或'126'),'ADA'是'156'(參見上面列表中的索引) – MarcinJuraszek 2013-03-18 19:20:44
列表長度是否有限制?每個排列的長度是否有限制?如果您已經嘗試過某些功能,請發佈您的代碼。 – daniloquio 2013-03-18 19:27:40