今天又见有人问所有排列方式的问题,便随手写了个:
static IEnumerable<IEnumerable<int>> GetAllSequence(int n)
{
if (n == 1)
{
return Enumerable.Range(0, 1).Select(_ => new int[] { 1 });
}
else
{
var num = Enumerable.Range(n, 1);
return from seq in GetAllSequence(n - 1)
from count in Enumerable.Range(0, n)
select seq.Take(count).Concat(num).Concat(seq.Skip(count));
}
}
记得以前也写过过关于这个算法,搜了一下,是篇08年的老文章——一道关于排列组合的算法题。看了一下,虽然方法基本上是一样的,以前的代码写得比较青涩。看来这几年编程水平还是有点提高的。^_^