gpt4 book ai didi

c# - 清洁算法生成所有类型的集合 (0) 到 (0,1,2,3,4,5,6,7,8,9)

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:32:19 25 4
gpt4 key购买 nike

基本上,我想要一组包含从 (0..9)、然后 (0, 1..9)、(1, 2..9)..(8,9) 和依此类推,直到 (0,1,2,3,4,5,6,7,8,9)。我知道这可以通过以下面的方式嵌套 for 循环来实现,但我想知道是否有更简洁的方法?

最好是可以在 C# 中完成的东西,但我对任何算法都感兴趣。

for (int i = 0; i < max; i++) {
yield {i};
for (int j = i + 1; j < max; j++) {
yield {i, j};
for (int k = j + 1; k < max; k++) {
yield {i, j, k};
for (int l = k + 1; l < max; l++) {
yield {i, j, k, l};
for (int m = l + 1; m < max; m++) {
yield {i, j, k, l, m};
// And so on and so forth
}
}
}
}
}

最佳答案

这是我很久以前写的。它使用堆栈。它是通用的,因此也可以用于其他序列。

static IEnumerable<T[]> CombinationsAnyLength<T>(params T[] values)
{
Stack<int> stack = new Stack<int>(values.Length);
int i = 0;
while (stack.Count > 0 || i < values.Length) {
if (i < values.Length) {
stack.Push(i++);
int c = stack.Count;
T[] result = new T[c];
foreach (var index in stack) result[--c] = values[index];
yield return result;
} else {
i = stack.Pop() + 1;
if (stack.Count > 0) i = stack.Pop() + 1;
}
}
}

CombinationsAnyLength(1, 2, 3, 4) outputs:

112123123412413134142个23234243个344

关于c# - 清洁算法生成所有类型的集合 (0) 到 (0,1,2,3,4,5,6,7,8,9),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26018626/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com