【发布时间】:2022-01-11 05:29:52
【问题描述】:
我尝试在 C# 中实现的算法有问题(我猜该语言无关紧要)。
假设我有一个可以是任意长度的列表..例如:
var maxNumbers = new List<int>{5,3,2}();
列表中的数字代表每个条目的最大值。例如,第一个条目表示它可以是 1 到 5 之间的任意数字(包括 5)。
现在,我想打印列表中每个条目的每个可能值的所有组合。
解释一下:
- 列表中的第一个数字是 5,因此可能的值是 1,2,3,4,5
- 列表中的第二个数字是 3,因此可能的值 是 1,2,3
- 列表中的最后一个数字是 2,所以可能的值 是 1,2
我的算法应该打印如下内容:
1-1-1
1-1-2
1-2-1
1-2-2
1-3-1
1-3-2
1-2-1
等等
我尝试使用递归来实现这一点,但无法实现。这是我的代码:
void Iterate(List<int> numbers)
{
if (numbers.Count == 0)
{
Console.WriteLine("");
return;
}
int number = numbers[0];
for (int i = 1; i <= number; i++)
{
Console.WriteLine($"{i} ");
Iterate(numbers.Where((v, index) => index != 0).ToList());
}
}
谁能提供见解?
【问题讨论】:
-
要求非常模糊,我会提供一个包含整个所需输出的最小示例,以便人们可以得到它。例如为什么链中总是有 3 个整数...
-
我认为最后一个例子是一个错字。链中有 3 个,因为输入有 3 个最大值。如果 maxNumber 中有 5 个最大值,则输出将有 5 个,例如 1-1-1-1-1、1-1-1-1-2..
-
@CaiusJard 一个假设……万恶之源 =)
标签: c# algorithm iteration combinations