110,537
社区成员
发帖
与我相关
我的任务
分享
static void Main(string[] args)
{
var a = new List<int>() { 0, 1, 2, 3, 4, 5 };
var s = "777777";
for (var n = 1; n <= s.Length; n++)
{
Console.WriteLine("n = "+n);
foreach (var k in CombinationIndex(s.Length, n))
{
var t = s.Select((x, i) => k.Contains(i) ? '2' : x);
Console.WriteLine(string.Join(", ", t));
}
}
}
//C(n,m) 组合序数,可作为数组下标
static IEnumerable<List<int>> CombinationIndex(int len, int num)
{
var d = Enumerable.Range(0, len);
var r = d.Select(x => new int[] { x });
for (int i = 1; i < num; i++)
{
r = r.SelectMany(x => d.Where(y => y.CompareTo(x.First()) < 0).Select(y => new int[] { y }.Concat(x).ToArray()));
}
foreach (var x in r) yield return x.ToList();
}