比如A={1,2,3},那么A的幂集为P(A)={{1,2,3},{1,2},{1,3},{1},{2,3},{2},{3},{空}}
static void Main(string[] args)
{
ArrayList A = new ArrayList();
A.Add("1");
A.Add("2");
A.Add("3");
A.Add("4");
ArrayList B = new ArrayList();
List<ArrayList> C = new List<ArrayList>(); // 结果集
Program p = new Program();
p.GetPowerSet(0, A, B, ref C);
Console.WriteLine(C.Count);
Console.ReadLine();
}
void GetPowerSet(int i, ArrayList A, ArrayList B, ref List<ArrayList> C)
{
if (i == A.Count)
{
C.Add(B);
}
else
{
string x = GetElem(A, i);
int k = GetLength(B);
B.Insert(k, x);
GetPowerSet(i + 1, A, B, ref C);
B.RemoveAt(k);
GetPowerSet(i + 1, A, B, ref C);
}
}
string GetElem(ArrayList A, int i)
{
return A[i].ToString();
}
int GetLength(ArrayList A)
{
int i = 0;
foreach (string a in A)
{
if (a != "0")
{
i++;
}
}
return i;
}
using System;
using System.Collections.Generic;
using System.Linq;
public class Test
{
static List<List<int>> GetPowerSet(List<int> list)
{
return Enumerable.Range(0, 1 << list.Count())
.Select(x => list.Select((y, i) => new { y, i }).Where(y => (x & (1 << y.i)) == (1 << y.i)).Select(y => y.y).ToList())
.ToList();
}
public static void Main()
{
// your code goes here
List<int> list = new List<int>() {1,2,3};
foreach (var item in GetPowerSet(list))
{
Console.WriteLine(string.Join(",", item));
}
}
}
1
2
1,2
3
1,3
2,3
1,2,3
问题要是解决,请点下我回答右边的采纳,谢谢。