给定任意数量的有序列表
List<int> list1 = new List<int> {1, 1, 2};
List<int> list2 = new List<int> {1, 2, 3, 4};
List<int> list3 = new List<int> {1, 2};
List<int> listN = new List<int> {....,....};
我想找到列表的组合,以便按升序找到每个组合的总和。例如,
{1, 1, 1} = 3, where {1 (1st element of list1), 1 (1st element of list2), 1 (1st element of list3)}
{1, 1, 1} = 3, where {1 (2nd element of list1), 1 (1st element of list2, 1 (1st element of list3)}
{1, 2, 1} = 4
{1, 1, 2} = 4
{2, 1, 1} = 4
...
以升序查找总和的原因是我可以选择只计算前 M 个组合(例如上面的 M = 5)。
我目前的想法是以某种方式扩展查找所有列表的组合,如List<List<int>> 的组合中所讨论的,从列表的一个小子集开始,其中当前元素和下一个元素之间的差异为 0,例如
List<int> tempList1 = new List<int> {1, 1};
List<int> tempList2 = new List<int> {1};
List<int> tempList3 = new List<int> {1};
并找到所有组合,然后将具有最小差异的下一个元素添加到列表中
List<int> tempList1 = new List<int> {1, 1, 2};
List<int> tempList2 = new List<int> {1, 2};
List<int> tempList3 = new List<int> {1, 2};
并从那里构建解决方案集。
这可能吗,有没有更好的方法来做到这一点?