生成序列数与重复
本文关键字: | 更新日期: 2023-09-27 18:17:40
我有以下代码:
var result = AllSequences(1, 10, 3);
public static IEnumerable<List<int>> AllSequences(int start, int end, int size)
{
if (size == 0)
return Enumerable.Repeat<List<int>>(new List<int>(), 1);
return from i in Enumerable.Range(start, end - size - start + 2)
from seq in AllSequences(i, end, size - 1)
select new List<int> { i }.Concat(seq).ToList();
}
结果:1,1,1
1,1,2
1,1,3
1,1,4
....
2,2,2
2,2,3
2,2,4
但是在进入这个序列之前,希望你是这样的:
2,1,1
2,1,2
2,1,3
2,1,4
.....
我在生成序列时遇到了麻烦,我正在使用LINQ在这个循环中获得性能
我对你的问题有点困惑,但如果你想让序列从1到10的每个数字运行,对于所有排列尝试这样的东西。
我并不是在提倡使用LINQ,只是想尽量少地修改你的代码。
public static IEnumerable<List<int>> AllSequences(int start, int end, int size)
{
if (size == 0)
return Enumerable.Repeat<List<int>>(new List<int>(), 1);
return from i in Enumerable.Range(start, end)
from seq in AllSequences(start, end, size - 1)
select new List<int> { i }.Concat(seq).ToList();
}
结果将
1, 1, 1
1, 1, 2
... etc
1, 1, 10
1, 2, 1
1, 2, 2
... etc
1, 10, 8
1, 10, 9
1, 10, 10
2, 1, 1
2, 1, 2
.... etc
10, 10, 10