考虑到N个元素有2的N次方减1种组合,把组合序号转成二进制,根据二进制中1的位置取出数组的元素组合即可。不知以下代码与16楼chenjin145的相比,哪个更快,谁有更好的思路请拿来共享。在此再次感谢各位帮助我的人!
static void Main()
{
int j = Convert.ToInt32(Console.ReadLine());
ArrayList al = new ArrayList();
for (int i = 0; i < j; i++)
{
al.Add(Convert.ToString(i + 1));
}
Double k = Math.Pow(2, j)-1;
Int64 m = Convert.ToInt64(k);
string str = "";
string str2 = "";
for (Int64 n = 1; n <= m; n++)
{
str = Convert.ToString(n, 2);
int strL = str.Length;
str2 = "";
for (int i = 0; i < strL; i++)
{
if (str.Substring(i, 1) == "1")
{
str2 = str2 + al[i + al.Count - strL];
}
}
Console.WriteLine(str2);
}
Console.ReadKey();
}