更清晰理解的示例。
让
数组A - [1,2]
数组B - [3,4]
结果阵列 - [1,2,3,4],[1,3,2,4],[1,3,4,2],[3,4,1,2],[3,1] ,4,2],[3,1,2,4]
结果数组包含A,B的元素,其顺序与给定的相同。 (2总是在1之后,4总是在3之后) 我们必须打印可能的组合总数以获得结果数组。
在这种情况下是6。
注意:数组元素按递增顺序给出,它应该在结果数组中以相同的顺序出现。
我想我可以在这里使用DP,但我不确定,
EG。基本情况是,如果任何数组为空,那么只有一个可能的结果数组,非空数组本身。 但是我无法继续这个基本案例。任何指导都将深表感谢。 好吧,我甚至可以确定DP是否合适,或许还有其他可能的方法来解决问题。
不,这不是作业。
答案 0 :(得分:0)
让A的元素个数为M,并且让B的元素个数为N.输出数组由数组中的M + N个位置由A的元素填充唯一确定。我们可以从M + N个位置产生M的所有可能选择,并且对于每个选择,将A的元素分配给那些位置,将B的元素分配给其他位置,并输出该数组。例如,在Python中:
import itertools
def merges(a, b):
output_len = len(a) + len(b)
for positions in itertools.combinations(range(output_len), len(a)):
position_set = set(positions)
a_iter, b_iter = iter(a), iter(b)
yield [next(a_iter) if i in position_set else next(b_iter)
for i in xrange(output_len)]